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 相关文章推荐
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
php 购物车完整实现代码
Jun 05 PHP
PHP实现的下载远程图片自定义函数分享
Jan 28 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
Laravel 5框架学习之Eloquent 关系
Apr 09 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
PHP查询附近的人及其距离的实现方法
May 11 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
May 16 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
php 将json格式数据转换成数组的方法
Aug 21 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英文字符串截取代码分享
2014/07/15 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
js如何打印object对象
2015/10/16 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
一名毕业生的自我鉴定
2013/12/04 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
客服部班长工作责任制
2014/02/25 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
质量保证书格式模板
2015/02/27 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
2016年安全月活动总结
2016/04/06 职场文书
python使用torch随机初始化参数
2022/03/22 Python