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 相关文章推荐
新版PHP将向Java靠拢
Oct 09 PHP
php IP及IP段进行访问限制的代码
Dec 17 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
May 26 PHP
使用PHP强制下载PDF文件示例
Jan 17 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
May 20 PHP
PHP实现小偷程序实例
Oct 31 PHP
PHP goto语句用法实例
Aug 06 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
PHP实现随机发放扑克牌
Apr 21 PHP
PHP获取学生成绩的方法
Nov 17 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获取mysql字段名称和其它信息的例子
2014/04/14 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
JavaScript事件列表解说
2006/12/22 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
pymysql模块的操作实例
2019/12/17 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
党员组织关系介绍信
2014/02/13 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
文明演讲稿范文
2014/05/12 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
新教师培训心得体会
2014/09/02 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
公司更名通知函
2015/04/24 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
怎么用Python识别手势数字
2021/06/07 Python
用Python实现屏幕截图详解
2022/01/22 Python
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android