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 相关文章推荐
将OICQ数据转成MYSQL数据
Oct 09 PHP
php curl获取网页内容(IPV6下超时)的解决办法
Jul 16 PHP
php创建sprite
Feb 11 PHP
ThinkPHP实现多数据库连接的解决方法
Jul 01 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
PHP统计目录中文件以及目录中目录大小的方法
Jan 09 PHP
PHP构造二叉树算法示例
Jun 21 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
Jul 13 PHP
PHP内存溢出优化代码详解
Feb 26 PHP
php中Swoole的热更新实现代码实例
Mar 04 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框架的性能
2008/01/10 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
JS原型链怎么理解
2016/06/27 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
Python切换pip安装源的方法详解
2016/11/18 Python
Python分析学校四六级过关情况
2017/11/22 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
优秀民警事迹材料
2014/01/29 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
倡议书范文大全
2015/04/28 职场文书
单位收入证明范本
2015/06/18 职场文书
监护人证明
2015/06/19 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
高质量“欢迎词”
2019/04/03 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫