PHP调用COM读写Word造成乱码的问题
发布于:2022-01-17 09:50:54
#1 xgsong
由于项目需要,要用PHP读写Word文件(模板),开源的项目例如phpword,phpdocx等都测试过,但是都有各种各样的问题,phpword已经很长时间没有人维护了,基本处于报废的状态,phpdocx免费版貌似不能操作模板文件,createdocx类里面根本没有addtemplate的方法,和官网的教程差异太大,所以最后也放弃了。
选来选去只能用COM来手工操作Office组件进行Word文件的读写,测试下来确实能够达到功能要求,但是写入中文会在中文后面留下一串乱码,很是烦人,没办法解决,请各位专家会诊,呵呵!主要代码贴在下面:
$word = new COM('word.application', null, CP_UTF8) or die('请安装Word');
$word->Visible = false;
try {
$word->Documents->Open($template_path.'test.doc') or die('无法打开文件');
$bookmarks = $word->ActiveDocument->Bookmarks->Count;
for ($i = 1; $i <= $bookmarks; $i++) {
$bookmark = $word->ActiveDocument->Bookmarks->Item($i);
$bookmark->Range->Text = trim(strval($bookmark_value[$bookmark->Name]));
}
$word->ActiveDocument->SaveAs($save_path.$file['file_name']);
$word->Quit();
} catch (Exception $e) {
header("Content-Type: text/html;charset=utf-8");
echo $e->getMessage();
$word->Quit();
exit;
}
2013-04-11 22:57:39
#2 xgsong
我晕哦,都没人回复。。。。有没有高人解决了乱码的问题???
2013-04-12 10:15:54
#3 xgsong
看来都没有人用COM操作Office,难道没有做OA、CMS这些系统的朋友?
2013-04-12 15:36:25
#4 xgsong
自己给自己结贴了,phpdocx free这个版本没有addTemplate这种功能,说白了就是不付费就没办法从模板来生成word文件,不知道PHP操作Word的问题Jake有没有好的解决办法
2013-04-15 00:35:48
#5 拓文
字符编码问题吧,转换成UTF8或GBK 。。试试
2013-04-15 02:33:40
#6 jake
xgsong 发表于 2013-4-15 00:35
自己给自己结贴了,phpdocx free这个版本没有addTemplate这种功能,说白了就是不付费就没办法从模板来生成w ...
没搞过php操作com的,最牛的就是把文本存成doc当word下载了。
2013-04-15 09:26:05
#7 xgsong
拓文 发表于 2013-4-15 02:33
字符编码问题吧,转换成UTF8或GBK 。。试试
打开Word的时候已经是用UTF-8编码打开了,如果默认用GBK编码打开,用iconv('utf-8', 'gbk', $input_str)一样会产生乱码,但是用PHPWord这类的类库写入Word就不会产生乱码,很奇葩的!
2013-04-15 11:41:26
#8 xgsong
jake 发表于 2013-4-15 09:26
没搞过php操作com的,最牛的就是把文本存成doc当word下载了。
如果需求简单确实可以这样搞,但是需要读取预制的Word模板,然后将里面的书签替换成对应的数值,而且还要动态生成Word表格,非常麻烦。。。只有给客户说把Word下载下来后手工把乱码删掉了,呵呵!
2013-04-15 11:46:09
#9 xgsong
同样是读写Excel,PHPExcel就很给力,功能强大不说,而且写入中文、英文都不会乱码。。。phpdocx倒是不错,但就是免费版的没有读取模版的功能
2013-04-15 11:47:38