ThinkPHP3.2.3集成PHPExcel,Linux下导出Excel乱码问题终极解决
来源:互联网 发布:支付宝绑定淘宝账号 编辑:程序博客网 时间:2024/04/29 21:16
PHPExcel
PHPExcel集成了强大的功能。这里主要讲解如何使用Excel的导入导出功能。
PHPExcel下载地址:http://phpexcel.codeplex.com/
ThinkPHP3.2.3集成PHPExcel
1、下载PHPExcel
2、将Classes下的PHPExcel.php及PHPExcel文件夹拷贝到ThinkPHP\Library\Org\Util目录下,并将PHPExcel.php重全名为PHPExcel.class.php
3、调用PHPExcel的功能,我的做法是把其功能封装在一个文件excel.php,放在Common目录下。
excel.php代码如下:
<?php/** * 将Excel数据读取到数组 * @param string $fileName Excel文件名 * @return array */function readExcel($filename){ //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入 import("Org.Util.PHPExcel"); //创建PHPExcel对象,注意,不能少了\ $PHPExcel=new \PHPExcel(); //如果excel文件后缀名为.xls,导入这个类 import("Org.Util.PHPExcel.Reader.Excel5"); $PHPReader=new \PHPExcel_Reader_Excel5(); //如果excel文件后缀名为.xlsx,导入这下类 if(strstr($filename,'.xlsx')){ import("Org.Util.PHPExcel.Reader.Excel2007"); $PHPReader=new \PHPExcel_Reader_Excel2007(); } //载入文件 $PHPExcel=$PHPReader->load($filename); //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推 $currentSheet=$PHPExcel->getSheet(0); //获取总列数 $allColumn=$currentSheet->getHighestColumn(); //获取总行数 $allRow=$currentSheet->getHighestRow(); //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始 for($currentRow=1;$currentRow<=$allRow;$currentRow++){ //从哪列开始,A表示第一列 for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){ //数据坐标 $address=$currentColumn.$currentRow; //读取到的数据,保存到数组$arr中 $arr[$currentRow][$currentColumn]=$currentSheet->getCell($address)->getValue(); } } return $arr;}/** * 将二维数组数据导出到excel * @param string $fileName 文件名 * @param array $headArr Excel表头 * @param array $data 写入excel的数据 * @return null */function downloaddExcel($fileName,$headArr,$data){ //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入 import("Org.Util.PHPExcel"); import("Org.Util.PHPExcel.Writer.Excel5"); import("Org.Util.PHPExcel.IOFactory.php"); //对数据进行检验 if(empty($data) || !is_array($data)){ die("data must be a array"); } //检查文件名 if(empty($fileName)){ exit; } $date = date("Y_m_d",time()); $fileName .= "_{$date}.xls"; //创建PHPExcel对象,注意,不能少了\ $objPHPExcel = new \PHPExcel(); $objProps = $objPHPExcel->getProperties(); //设置表头 $key = ord("A"); foreach($headArr as $v){ $colum = chr($key); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v); $key += 1; } $column = 2; $objActSheet = $objPHPExcel->getActiveSheet(); foreach($data as $key => $rows){ //行写入 $span = ord("A"); foreach($rows as $keyName=>$value){// 列写入 $j = chr($span); $objActSheet->setCellValue($j.$column, $value); $span++; } $column++; } $fileName = iconv("utf-8", "gb2312", $fileName); //重命名表 // $objPHPExcel->getActiveSheet()->setTitle('test'); //设置活动单指数到第一个表,所以Excel打开这是第一个表 $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header("Content-Disposition: attachment;filename=\"$fileName\""); header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); //文件通过浏览器下载 exit;}?>
以上函数实现了导入导出Excel功能。
4、加载excel.php文件,在config.php中加入如下配置:
//加载公共函数文件'LOAD_EXT_FILE' => 'excel',
5、在工程中任何位置都可以调用function readExcel($filename)
和function downloaddExcel($fileName,$headArr,$data)
方法了。
6、以上代码在Windows下测试良好,放到Linux服务器后导出始终乱码。
解决方法:在header前加如下代码
ob_end_clean();// 清空(擦除)缓冲区并关闭输出缓冲
原因肯定是由于其他缓冲区内容输入到了Excel中,导致无法识别。
大功告成!
导出报表的样式设置参考:http://www.cnblogs.com/freespider/p/3332550.html
1 0
- ThinkPHP3.2.3集成PHPExcel,Linux下导出Excel乱码问题终极解决
- ThinkPHP3.2利用PHPExcel导出Excel
- 解决phpExcel导出乱码且Content-Type失效的问题
- ASP.NET 导出Excel乱码的终极解决
- phpExcel导出excel打不开问题
- thinkphp3.2 运用PHPExcel将数据导出Excel
- EXCEL导出乱码终极解决之道
- phpexcel导出excel中文乱码问题解决
- java-导出excel并解决乱码问题
- 解决excel导出csv乱码问题
- ThinkPHP3.2.3 Excel 导入导出
- PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解,解决PHP下载文件名中文乱码
- IE下PHPEXCEL乱码问题
- as3xls导出Excel和解决导出中文乱码问题
- excel 导出乱码问题
- Excel导出乱码问题
- phpexcel导出excel文件
- PHPExcel导出excel
- php如何控制用户对图片的访问 PHP禁止图片盗链
- 数字图像处理(2)--直方图
- PVZ实战01
- linux内核工程导论-系统调用
- erlang lists模块函数使用大全
- ThinkPHP3.2.3集成PHPExcel,Linux下导出Excel乱码问题终极解决
- Struts2运行过程简介
- 第三周项目1-顺序表的基本运算
- 网络编程(10)—— 通过设置可选项取消socket的TImeWait状态以及开启Nagle算法
- 使用http协议访问网络
- ListView ArrayAdapter
- BasicDataSource Configuration 配置参数(译)
- 第三周项目4-顺序表应用
- hdu 5884 二分 + 前k优化