PHP生成Excel之表格(二)
2018-03-27 22:20
274 查看
php使用phpexcel提供的操作方法,生成excel。
按照思路,我们现在,只需要打开这个文件。然后把数据写入到空白的地方。
我的习惯,把注释写到代码中。这样也比较好明确到行上。基本上代码内容个前一篇文章一样。就是少了样式配置的内容。多了读取excel文件的部分。整体看,代码简洁易懂。代码量也少了很多。
看着好像没有什么问题,那就看看执行效果吧。
暂时不看第二个表格无样式部分。有样式部分是不是跟目标excel一模一样?
简短的代码,实现效果比之前好很多。或者说跟要求一模一样。唯一的缺陷就是,这是一个长度可变的数组(excel列数不固定,无法配样式)。如果报表固定长度,那我们实现方式就完美了。
到这里,小部分的报表,对于我们没什么问题了。但是为了能支持更多的报表,使生产excel一点都不困难,还是需要优化一下,而且也是可以优化的。
从报表看,我们只要解决下面问题,可变数组生成excel的问题也能解决了。
excel中的样式能否复制?
怎么把单元格样式,复制到其他单元格?
遇到的问题
上一篇文章中PHP生成Excel之表格(一),给出了常规情况下使用phpexcel来生成excel的方法。但是这种方法很麻烦,还需要翻文档查看很多方法。而且生成的样式也不是最完美的。那么这篇文章,我们就思考如何解决这个,既繁琐又不完美的生成方式。思考
之前结束phpexcel这个插件时,有说到。除了能读取excel、生成excel外还能修改excel。换而言之,我们能打开一个一直配置好样式的excel,然后修改或者写入我们的数据,最后再保存。貌似这个思路可行。Excel模板
在写代码前,我们需要准备一个excel模板。同时需要把样式调试好。按照思路,我们现在,只需要打开这个文件。然后把数据写入到空白的地方。
代码演示
// $data 为三维数组数据源。 // $outputname 为导出的文件名。 public function ExportExcelForCopy($data,$outputname){ $filename = "../web/excelmodel/excel_copy.xlsx"; $objReader = new \PHPExcel_Reader_Excel2007(); //读取文件到对象中 $resultPHPExcel = $objReader->load($filename); $outputFileName = $outputname.date('Y_m_d_H_i').'.xlsx'; $i = 0; // 这里的循环用于写入到sheet foreach ($data as $key => $value) { //取第一个sheet $resultPHPExcel->setActiveSheetIndex($i); $i=$i+1; //数据写入 第三个参数为开始的行数。 $this->_new_exprot_excel($value,$resultPHPExcel,96); } $xlsWriter = new \PHPExcel_Writer_Excel2007($resultPHPExcel); $savepath = Yii::$app->basePath.'/uploads/tmp_excel/'.date('Ym',time()).'/'; if(!is_dir($savepath)){ mkdir($savepath,0777,true); } //输出到浏览器 header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header('Content-Disposition:inline;filename="'.$outputFileName.'"'); header("Content-Transfer-Encoding: binary"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); $xlsWriter->save( "php://output" ); } /* 数据写入方法 */ public function _new_exprot_excel($data,$resultPHPExcel,$mun=1){ $i = $mun; foreach($data as $item){ foreach($item as $key=>$val){ $cellID=self::stringFromColumnIndex($key).$i; // 这里是读取单元格内容。当为空的时候才写入数据。 $date = $resultPHPExcel->getActiveSheet()->getCell($cellID)->getValue(); if ($date=='') { $resultPHPExcel->getActiveSheet()->setCellValue($cellID,$val); } } $i ++; } }
我的习惯,把注释写到代码中。这样也比较好明确到行上。基本上代码内容个前一篇文章一样。就是少了样式配置的内容。多了读取excel文件的部分。整体看,代码简洁易懂。代码量也少了很多。
看着好像没有什么问题,那就看看执行效果吧。
Excel效果
暂时不看第二个表格无样式部分。有样式部分是不是跟目标excel一模一样?
简短的代码,实现效果比之前好很多。或者说跟要求一模一样。唯一的缺陷就是,这是一个长度可变的数组(excel列数不固定,无法配样式)。如果报表固定长度,那我们实现方式就完美了。
分析问题
从生成的效果来看,如果一个报表宽高固定,就能采用这种方式生成excel。简答、高效。修改起来也方便,关一个模板,代码都不需要修改。到这里,小部分的报表,对于我们没什么问题了。但是为了能支持更多的报表,使生产excel一点都不困难,还是需要优化一下,而且也是可以优化的。
从报表看,我们只要解决下面问题,可变数组生成excel的问题也能解决了。
excel中的样式能否复制?
怎么把单元格样式,复制到其他单元格?
相关文章推荐
- PHPExcel表格生成
- 【PHP】PHP使用PHPExcel生成Excel表格文件(附带随机生成英文名函数)
- PHP生成Excel之表格(一)
- PHP生成excel表格文件并下载
- PHP导出数据表数据生成Excel表格文件
- phpexcel 生成表格
- php直接生成.csv后缀文件的excel表格实例
- php生成excel列序号代码实例
- php上传excel表格并获取数据
- Web页面生成 Excel 表格
- php编辑生成excel,哪种方法最好?
- Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"
- php生成excel
- PHPExcel:用于Excel等文档生成的PHP开源类库
- ASP.NET中应用Excel:(10)在客户端生成HTML表格[修正]
- 从使用中国银行网上银行学到的如何用 php 生成 excel
- 生成pdf与img的插件wkhtmltoimage wkhtmltopdf ; 弃用phpexcel
- phpExcel 生成快递单
- Php代码实现将mysql数据库导出为excel表格形式
- php使用phpexcel开发库生成和读取excel