#导入类库 require_once 'PHPExcel/Classes/PHPExcel.php'; require_once 'PHPExcel/Classes/PHPExcel/Writer/Excel5.php'; //Office 03格式写类 require_once 'PHPExcel/Classes/PHPExcel/Writer/Excel2007.php'; //Office 07格式写类 #基础操做 $objPHPExcel = \PHPExcel_IOFactory::load('a.xls'); //读入指定excel文件 $objPHPExcel->setActiveSheetIndex(0); //指定活动工做表 $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('宋体'); $objPHPExcel->getProperties()->setTitle('xxx'); #单元格写入 $objPHPExcel->getActiveSheet()->setCellValue('A3', 'xxx'); //设定A3单元格值为xxx #单元格合并 $objPHPExcel->getActiveSheet()->mergeCells('A3:B2'); //设定A1至B2单元格 #插入一行 $objPHPExcel->getActiveSheet()->insertNewRowBefore($pBefore = 1, $pNumRows = 1); #单元格背景色 $objPHPExcel->getActiveSheet()->getStyle( 'A1:B10')->getFill()->getStartColor()->setARGB('FFFFFF'); #单元格绘图 $objDrawing = new \PHPExcel_Worksheet_Drawing(); $objDrawing->setPath('a.jpg'); //指定图片路径。若远程图片需PHPExcel/Classes/PHPExcel/Worksheet/Drawing.php:106处file_exists换成file_get_contents $objDrawing->setCoordinates('A4'); //指定在A4单元格绘图 $objDrawing->setName('Photo'); $objDrawing->setDescription('Photo'); $objDrawing->setHeight(120); $objDrawing->setWidth(100); $objDrawing->setOffsetX(7); $objDrawing->setOffsetY(7); $objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
function getWriter($type, $objPHPExcel) { switch ($type) { case 'pdf': require_once 'PHPExcel/Classes/PHPExcel/Writer/PDF.php'; $rendererName = \PHPExcel_Settings::PDF_RENDERER_MPDF; //指定使用mpdf类库 $rendererLibraryPath = 'PHPExcel/MPDF57'; if (!\PHPExcel_Settings::setPdfRenderer($rendererName, $rendererLibraryPath)) die('请配置pdf支持组件'); $objWriter = new \PHPExcel_Writer_PDF($objPHPExcel); $objWriter->setPreCalculateFormulas(false); break; case 'xls': require_once 'PHPExcel/Classes/PHPExcel/Writer/Excel2007.php'; $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); break; case 'html': default: $objWriter = new \PHPExcel_Writer_HTML($objPHPExcel); # html输出主要用于调试 break; } return $objWriter; } function setDownStreamHeader($MIME, $file_name) { ob_end_clean(); header("Content-type: $MIME"); $ua = $_SERVER["HTTP_USER_AGENT"]; if (preg_match("/MSIE/", $ua) || preg_match("%Trident/7.0%", $ua) || preg_match("/Edge/", $ua)) { header('Content-Disposition: attachment; filename="' . rawurlencode($file_name) . '"'); } else { if (preg_match("/Firefox/", $ua)) header("Content-Disposition: attachment; filename*=\"utf8''" . $file_name . '"'); else header('Content-Disposition: attachment; filename="' . $file_name . '"'); } header("Pragma:no-cache"); header("Expires:0"); } $objPHPExcel = \PHPExcel_IOFactory::load('test.xls'); switch ($_GET['export_type']) { case 'xls': setDownStreamHeader('application/vnd.ms-excel', 'test.xls'); $objWriter = getWriter('xls', $objPHPExcel); break; case 'pdf': setDownStreamHeader('application/pdf', 'test.pdf'); $objWriter = getWriter('pdf', $objPHPExcel); break; case 'html': default: $objWriter = getWriter('html', $objPHPExcel); break; } $objWriter->save('php://output');
#PHPExcel/Classes/PHPExcel/Writer/PDF/mPDF.php:105处加两行设定: $pdf->useAdobeCJK = true; $pdf->SetAutoFont(AUTOFONT_ALL);
正则调用的e模式致使导出失败 类库里面多处preg_replace调用使用了元字符e,而部分低版本php不支持正则表达式e元字符
e元字符的不当使用并致使pdf报错的触发点在类库里面大概有五六处
因为e元字符是一个shell下的子进程php调用,因此报错信息不会反馈到当前php进程中,故即使你配置了错误打印到屏幕, 页面也不会显示报错信息, 必须查看php报错日志
查看php报错日志,把提示的preg_replace中元字符e的调用替换为preg_replace_callback形式的调用php
部分版本phpexcel类库单元格样式判断错误css
lib/PHPExcel/Classes/PHPExcel/Writer/HTML.php:1236处加个if判断 if (!$this->_useInlineCss) { $cssClass .= ' style' . $pSheet->getCell($endCellCoord)->getXfIndex(); }
头部设置后,直接将Table Html返回,浏览器自动处理为xls下载html
header('Content-type: application/xls'); header('Content-Disposition: attachment; filename="aaa.xls"'); echo <<<EOL <table border="1"> <caption>表格</caption> <thead> <tr> <th>id</th> <th>订单号</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>aaa</td> </tr> </tbody> </table> EOL;