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...算是个彩蛋吧,留着以后也许会用到。

 

posted @ 2015-06-19 17:41  泽塔考拉  阅读(1024)  评论(0编辑  收藏  举报