PHP将Excel另存为Word

//这里引入PHPExcel类
$filePath = 'Excel文件.xls';
$fileType = PHPExcel_IOFactory::identify($filePath); //文件名自动判断文件类型
$objReader = PHPExcel_IOFactory::createReader($fileType);
$objPHPExcel = $objReader->load($filePath);

$savePath = '文件保存路径/文件名.doc'; //这里直接改为word后缀即可
$objWriter = new PHPExcel_Writer_HTML($objPHPExcel); 

//注意这里,比上篇文章多了这行代码
$objWriter->setUseInlineCss(true); //采用内联样式

$objWriter->setSheetIndex(0);
$objWriter->save($savePath); 

真心感觉这就像是连续剧,刚搞完另存为html,又搞了一个另存为word。

下面说原理:
其实原理不难,经过测试,fwrite写入html代码时,只要将css样式以内联样式写入,最后另存为的word即可显示对应的样式内容(关于内联、外联、嵌入样式的定义,请自行好搜)。比如html代码这么写:

<div style='color:red;font-weight:bold;'></div>

那么在生成的word中即可看到红色加粗的文字。但,如果div只是写成 class='className' 的形式,word则不会解析。

基于此思路,即将原本写在head中的css样式直接追加到Table内部,学名叫做 嵌入式样式表(内部样式表) 改为 内联样式,即可实现在保留样式的前提下另存为word。
我最初的方法是将PHPExcel自带的HTML类拷贝了一份,修改后作为Word类使用,但在修改过程中,发现了 setUseInlineCss 方法,从方法名就可以看出,这是设置是否采用内联样式的,悲催的是,当时我已经改了快一半...才发现,原来追加这一行代码即可,由此可见,通读代码是多么的重要,还好原作者的代码写的非常棒,要不然只能头疼着去读了...严重怀疑原作者当时也是为了保存为word,所以特意加了这么一个功能...(⊙﹏⊙)b

不过,还另有收获,源代码中针对PDF另存为html时,还增加了 Tab 标签功能,即会对多个sheet生成navigation...算是个彩蛋吧,留着以后也许会用到。

 

转载于:https://www.cnblogs.com/zetakoala/p/4589358.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值