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数组函数序列之array_sum() - 计算数组元素值之和
Oct 29 PHP
PHP循环语句笔记(foreach,list)
Nov 29 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
Jun 26 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
Thinkphp中数据按分类嵌套循环实现方法
Oct 30 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
Apr 20 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 PHP
基于laravel Request的所有方法详解
Sep 29 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处理斐波那契数列非递归方法
2012/02/04 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现下载文件的三种方法
2017/02/09 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
python如何使用代码运行助手
2020/07/03 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
商务助理岗位职责
2013/11/13 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
成立公司计划书
2014/05/07 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
演讲比赛通讯稿
2015/07/18 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
MYSQL如何查看操作日志详解
2022/05/30 MySQL
python实现学生信息管理系统(面向对象)
2022/06/05 Python