phpexcel 相关知识

1.phpexcel设置所有单元格为默认的水平垂直居中

$objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

2.phpexcel 设置excel单元格宽高

$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20);  #设置单元格行高
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);       #设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);       #设置单元格自适应宽度

3.导出excel文件后打不开,提示“文件格式或文件扩展名无效,请确定文件未损坏,并且文件扩展名与文件的格式匹配”

来自:https://www.cnblogs.com/imustun/p/9156851.html

原因:

1.发送header()头之前,不知道又啥特殊字符输出(可能是BOM,也可能是其他),导致php报错!然后将报错内容输出到了Excel
2.极大可能是:文件BOM头问题,生成的Excel文件头部添加了BOM头!

解决方案:

1.在输出Excel前,缓冲区中处理BOM头(可能是其他字符)

ob_end_clean();

ob_start();

在header()函数调用之前,清楚之前的错误输出!

参考:https://blog.csdn.net/liu857279611/article/details/51534450

  • ob_get_contents() --- 返回输出缓冲区的内容
  • ob_flush() --- 冲刷出(送出)输出缓冲区中的内容
  • ob_clean() --- 清空(擦掉)输出缓冲区
  • ob_end_flush() --- 冲刷出(送出)输出缓冲区内容并关闭缓冲
  • ob_end_clean() --- 清空(擦除)缓冲区并关闭输出缓冲
  • flush() --- 刷新输出缓冲    

通常是ob_flush();flush()同时一起使用
使用ob_start()把输出那同输出到缓冲区,而不是到浏览器。然后用ob_get_contents得到缓冲区的数据。

ob_start()在服务器打开一个缓冲区来保存所有的输出。所以在任何时候使用echo ,输出都将被加入缓冲区中,直到程序运行结束或者使用ob_flush()来结束。然后在服务器中缓冲区的内容才会发送到浏览器,由浏览器来解析显示。

函数ob_end_clean 会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。
此时得用一个函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。
这样的话, 能将在执行ob_end_clean()前把内容保存到一个变量中,然后在ob_end_clean()后面对这个变量做操作。

2.有人第一步过后,问题未解决。通过ob_get_contents()查看导出内容,并未发现BOM头。

再就是应用了框架,返回的静态页输出成了excel文件。

试了以上方法后,还是没有问题,最后查看导出的文件内容,意识到是跳转到静态页导致的。

加上 exit($contents); 后问题解决。

4.php 文件下载 出现下载文件内容乱码损坏的解决方法

参考:https://www.jb51.net/article/97441.htm

public function download(){
  $upload=M('upload');
  $data=$upload->find($_GET['id']);
 
  if(empty($data)){
      header('HTTP/1.0 404 Not Found');
      header('Location: .');
  }else{
      $path='./public/Uploads/'.$data['savename'];
      header("Content-Type:".$data['type']);
      header('Content-Disposition: attachment; filename="'.$data['name'].'"');
      header('Content-Length:'.$data['size']);
      ob_clean();
      flush();
      readfile($path);
  }
}

ob_clean();
flush();这个是关键。用了这两函数,图片正常打开,文字也不乱码。

5.php7环境下使用PHPExcel导出表格报错:网页可能暂时无法连接,或者它已永久性地移动到了新网址

解决方法:

把 PHPExcelCalculationFunctions.php 第574行的break注释掉

6.PHPExcel报错:'break' not in the 'loop' or 'switch' context

ThinkPHPLibraryVendorphpexcelPHPExcelCalculation  LINE: 581

直接删除581行的 'break'即可!

7.PHPExcel exception: “Could not close zip file … ”报错

 报错原因: 

1.确认保存文件的目录是否存在,有没有写错。

2.权限问题。缺少对于保存的目录的写权限。

3.文件被其他应用程序占用。

4.保存的文件名如果有中文的话注意编码问题。

5.磁盘容量满了。

6.如果保存为xlsx的格式无法成功的话,可以尝试保存成xls格式。

8.Class 'ZipArchive' not found

1)查看php是否安装了zip拓展   php -m

2)安装zip模块    sudo apt-get install php7.0-zip (可以先查看php版本)

原文地址:https://www.cnblogs.com/mianbaoshu/p/15392193.html