phpexcel 使用 - Go语言中文社区

phpexcel 使用


★安装

1.安装composer 

  安装方法: http://docs.phpcomposer.com/00-intro.html#Installation-Windows

  cmd  =》 composer -v  检查是否安装成功

2.cmd =》切换到项目目录,执行composer require phpoffice/phpexcel。之后等待安装完成,会自动在vendor目录生成文件

★应用

1.导出 

<a href="{:url('***/***/out')}" class="btn btn-primary">导出</a>

private function getExcel($fileName,$headArr,$data){
  //对数据进行检验
  if(empty($data) || !is_array($data)){
    die("data must be a array");
  }
  //检查文件名
  if(empty($fileName)){
    exit;
  }

  $date = date("Y_m_d",time());
  $fileName .= "_{$date}.xlsx";
  $objPHPExcel = new PHPExcel();
  $objProps = $objPHPExcel->getProperties();

  foreach($headArr as $k=>$v){
    if($k<26){
      $colum[$k]=chr(65+$k);
      $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum[$k].'1', $v);
    }else if($k<702){
      $colum[$k]=chr(64+($k/26)).chr(65+$k%26);
      $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum[$k].'1', $v);
    }
  }

  $column=2;
  $objActSheet = $objPHPExcel->getActiveSheet();
  foreach($data as $key => $rows){ //行写入
  $n = 0;
    foreach($rows as $keyName=>$value){// 列写入
      $j = $colum[$n];
      $objActSheet->setCellValueExplicit($j.$column,$value,PHPExcel_Cell_DataType::TYPE_STRING);
      $n++;
    }
    $column++;
  }
  $fileName = iconv("utf-8", "gb2312", $fileName);
  //重命名表
  // $objPHPExcel->getActiveSheet()->setTitle('test');
  //设置活动单指数到第一个表,所以Excel打开这是第一个表
  $objPHPExcel->setActiveSheetIndex(0);
  ob_end_clean(); //清空缓存
  header('Content-Type: application/vnd.ms-excel');
  header("Content-Disposition: attachment;filename="$fileName"");
  header('Cache-Control: max-age=0');
  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  //文件通过浏览器下载
  $objWriter->save('php://output');exit;
}

2.导入

  A.上传文件,这步略;

  B. 获取文件地址和名字,即是 $filename = "./1.xlsx";  

  C.执行 下面方法即可,$arr为从excel中获取到的数据

 

 

private function excelToArray($fliepath,$table){
  $phpexce = new PHPExcel();
  $phpReader = new PHPExcel_Reader_Excel2007();
  if(!$phpReader->canRead($fliepath)){
    $phpReader = new PHPExcel_Reader_Excel5();
    if(!$phpReader->canRead($fliepath)){
      echo 'no excel';
      return;
    }
  }
  $phpexcel = $phpReader->load($fliepath);
  $currentSheet = $phpexcel->getSheet(0); //读取excel文件中的第一个工作表
  $allColumn = $currentSheet->getHighestColumn(); //取得最大的列号
  $allRow = $currentSheet->getHighestRow(); //取得一共有多少行  
  $erp_orders_id = array(); //声明数组
  $val=[];
  for($currentRow = 1;$currentRow <= $allRow;$currentRow++){
    /**从第A列开始输出*/
    for($currentColumn= 0;$currentColumn< (ord($allColumn)-64); $currentColumn++){
      if($currentColumn<26){
        $colum=chr(65+$currentColumn);
      }else if($currentColumn<702){
        $colum=chr(64+($currentColumn/26)).chr(65+$currentColumn%26);
      }
      $v = $currentSheet->getCell($colum.$currentRow)->getValue();/**ord()将字符转为十进制数*/
      $val[$table[$currentColumn]] = rtrim(ltrim((String)$v,'="'),'"');
      /**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/
      //echo iconv('utf-8','gb2312', $val)."t";
    }
    if($val!=''){
      $erp_orders_id[$currentRow] = $val;
    }
  }
  return $erp_orders_id;
}

★错误总结:

1.ERR_INVALID_RESPONSE  这个是由于PHP版本过高导致的。在1.8.1版本中已经解决

当前解决方法: 删除PHPExcel / Classes / PHPExcel / Calculation / Functions.php中 581行左右删除break即可.

 

2. 可能导出的数据混乱

这个可能是缓存导致的,清空就好 代码中添加:ob_end_clean();

转载于:https://www.cnblogs.com/walksnow/p/7132907.html

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_30782293/article/details/97638543
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-19 16:35:31
  • 阅读 ( 1083 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢