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小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
php 读取shell管道传输过来的内容
Mar 01 PHP
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
如何使用PHP计算上一个月的今天
May 23 PHP
yii权限控制的方法(三种方法)
Dec 28 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
PHP延迟静态绑定的深入讲解
Apr 02 PHP
php分享朋友圈的实现代码
Feb 18 PHP
php原生数据库分页的代码实例
Feb 18 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 PHP
phpinfo的知识点总结
Oct 10 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
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
简体中文转换为繁体中文的PHP函数
2006/10/09 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
PHP实现下载功能的代码
2012/09/29 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
python regex库实例用法总结
2021/01/03 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
宣传策划类求职信范文
2014/01/31 职场文书
求职面试个人自我评价
2014/02/28 职场文书
导游欢送词
2015/01/31 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
开国大典观后感
2015/06/04 职场文书
田径运动会通讯稿
2015/07/18 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
500字作文之难忘的同学
2019/12/20 职场文书