PHP调用COM读写Word造成乱码的问题

#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_225618.jpg

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