PHPExcel笔记, mpdf导出


Posted in PHP onMay 03, 2016

phpexcel常用处理

##导入类库
require 'PHPExcel/Classes/PHPExcel.php';
require 'PHPExcel/Classes/PHPExcel/Writer/Excel5.php'; //非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
 
##单元格绘图
$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());
 
##excel文件浏览器下载导出
$filename='a.xls';
$encoded_filename = rawurlencode($filename);
$ua = $_SERVER["HTTP_USER_AGENT"];
header('Content-type: application/vnd.ms-excel');
if (preg_match("/MSIE/", $ua) || preg_match("/Trident\/7.0/", $ua) || preg_match("/Edge/", $ua)) {
  header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
  header("Content-Disposition: attachment; filename*=\"utf8''" . $filename . '"');
} else {
  header('Content-Disposition: attachment; filename="' . $filename . '"');
}
header("Pragma:no-cache");
header("Expires:0");
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
 
##excel文件html显示(可用于调试)
$objWriter = new \PHPExcel_Writer_HTML($objPHPExcel);
$objWriter->save('php://output');

利用mpdf库从phpexcel导出pdf文件

$filename='a.pdf';
$encoded_filename = rawurlencode($filename);
$rendererName = \PHPExcel_Settings::PDF_RENDERER_MPDF; //指定通过mpdf类库导出pdf文件
$rendererLibraryPath = 'PHPExcel/MPDF57'; //指定你下载的mpdf类库路径
if (!\PHPExcel_Settings::setPdfRenderer(
  $rendererName,
  $rendererLibraryPath
)) {
  die(
    'Please set the $rendererName and $rendererLibraryPath values' .
    PHP_EOL .
    ' as appropriate for your directory structure'
  );
}
header('Content-type: application/pdf');
if (preg_match("/MSIE/", $ua) || preg_match("/Trident\/7.0/", $ua) || preg_match("/Edge/", $ua)) {
  header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} 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");
$objWriter = new \PHPExcel_Writer_PDF($objPHPExcel);
$objWriter->setPreCalculateFormulas(false);
$objWriter->save('php://output');
 
 
##############################
##pdf导出失败的一些错误解决方法
##############################
 
##1 pdf中文乱码问题
PHPExcel/Classes/PHPExcel/Writer/PDF/mPDF.php:105处加两行设定:
$pdf->useAdobeCJK = true;
$pdf->SetAutoFont(AUTOFONT_ALL);
 
##2 类库里面多处preg_replace调用使用了元字符e,而部分低版本php不支持正则表达式e元字符
e元字符的不当使用并导致pdf报错的触发点在类库里面大概有五六处吧,
由于e元字符是一个shell下的子进程php调用,所以报错信息不会反馈到当前php进程中,故即便你配置了错误打印到屏幕, 页面也不会显示报错信息, 必须查看php报错日志
查看php报错日志,把提示的preg_replace中元字符e的调用替换为preg_replace_callback形式的调用
 
##3 部分版本phpexcel类库有单元格样式判断错误
lib/PHPExcel/Classes/PHPExcel/Writer/HTML.php:1236处加个if判断
if (!$this->_useInlineCss) {
  $cssClass .= ' style' . $pSheet->getCell($endCellCoord)->getXfIndex();
PHP 相关文章推荐
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
浅谈php中include文件变量作用域
Jun 18 PHP
php好代码风格的阶段性总结
Jun 25 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
详细解读php的命名空间(二)
Feb 21 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 PHP
PHP实现的进度条效果详解
May 03 #PHP
php实现按天数、星期、月份查询的搜索框
May 02 #PHP
php支持断点续传、分块下载的类
May 02 #PHP
php数组分页实现方法
Apr 30 #PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 #PHP
php打包压缩文件之ZipArchive方法用法分析
Apr 30 #PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
Apr 30 #PHP
You might like
PHP扩展CURL的用法详解
2014/06/20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
如何从零开始手写Koa2框架
2019/03/22 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
JQuery属性操作与循环用法示例
2019/05/15 jQuery
layui 实现表格某一列显示图标
2019/09/19 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
web.py中调用文件夹内模板的方法
2014/08/26 Python
Python运算符重载详解及实例代码
2017/03/07 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
高二英语教学反思
2014/01/19 职场文书
自荐信的格式
2014/03/10 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
安全生产月宣传标语
2014/10/06 职场文书
党员作风建设自查报告
2014/10/23 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
初三化学教学反思
2016/02/22 职场文书
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers