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 相关文章推荐
改进的IP计数器
Oct 09 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
简单的PHP多图上传小程序代码
Jul 17 PHP
PHP时间和日期函数详解
May 08 PHP
PHP中header函数的用法及其注意事项详解
Jun 13 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
PHP基于GD2函数库实现验证码功能示例
Jan 27 PHP
PHP strripos函数用法总结
Feb 11 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
Apr 26 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
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
iView框架问题整理小结
2018/10/16 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Python fileinput模块使用实例
2015/06/03 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
python列表生成器迭代器实例解析
2019/12/19 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
J2EE面试题集锦(附答案)
2013/08/16 面试题
《我为你骄傲》教学反思
2014/02/20 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫