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 相关文章推荐
IIS6的PHP最佳配置方法
Mar 19 PHP
discuz7 phpMysql操作类
Jun 21 PHP
php join函数应用
May 04 PHP
PHP curl_setopt()函数实例代码与参数分析
Jun 02 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
php多文件打包下载的实例代码
Jul 12 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
php遍历目录viewDir函数
2009/12/15 PHP
for循环连续求和、九九乘法表代码
2012/02/20 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
Python中方法链的使用方法
2016/02/23 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
Python的形参和实参使用方式
2019/12/24 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
html5时钟实现代码
2010/10/22 HTML / CSS
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
应用心理学个人求职信范文
2013/12/11 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
公司周年庆典标语
2014/10/07 职场文书
优秀教师个人材料
2014/12/15 职场文书
超市店长竞聘书
2015/09/15 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技