2012-08-13 93 views
2

当您打开Word时,它允许您保存为Word Open XML格式。我已经看到有关打开docx文件作为zip文件,然后从那里提取的东西的帖子。但我真正想要的是将docx转换为单个XML的方式,就像在MS Office中执行“另存为”操作时一样。该怎么办?如何将Doc/Docx自动转换为单个XML文件?

以及如何为.doc格式执行此操作?

注:我想以编程方式做到这一点。最好在Linux开发条件下使用PHP。但是,如果这不可用,那么其他语言将会这样做。最后,如果涉及到它,我可以考虑启动一个Windows服务器来做到这一点。

回答

1

In Word:文件|另存为| Word XML文档(* .xml)为您提供所需的Open XML格式,作为单个XML文件

在使用Interop的代码中:使用Document对象的SaveAs方法,使用WdSaveFormat.wdFormatXMLDocument作为保存格式。您还应该使用Document.Convert方法更新与安装的MS Office版本的兼容性。

所以,不一定是一个完整的演示,但是这应该给你正确的观念:

ActiveDocument.Convert(); 

WdSaveFormat myNewSaveFormat = WdSaveFormat.wdFormatXMLDocument; 
ActiveDocument.SaveAs(newFilePath, myNewSaveFormat); //where newFilePath can be a FileInfo object specifying the new file name and extension (docx) 
+1

有没有办法做到这一点没有interop?例如,作为docx的zip包 - 它是否具有某种模式,可用于合并与单一文件XML完全相同的内容? – samxli 2012-08-13 15:21:50

+0

对不起,它被标记为office-interop,所以我假设。另外,不确定您是否能够在服务器场景中使用Interop,可能需要检查其他线程。 ||这听起来像是你想要每个构成一个WordprocessingDocument对象的包/零件,但是它们都在一个统一的包/零件中。 – JohnZaj 2012-08-13 21:40:29

+0

谢谢你。我试图使用wdFormatOpenDocumentText来保存一个.docx文件,并得到一个COM异常。 – GrandMasterFlush 2012-09-20 10:04:30

3

对不起,以恢复死亡的线程,但我只是找到了DOCX文件的答案。 DOCX文件只是XML文件的ZIP存档。因此,为了提取其文件之一的内容,v.gr.字Linux环境下/ document.xml中,你必须运行unzip:

unzip -q -c myfile.docx word/document.xml 

为了捕捉这个命令的输出到一个PHP脚本的$ xml变量,可以发出:

$xml = shell_exec ("unzip -q -c myfile.docx word/document.xml"); 

希望这个答案有助于DOCX文件。迟到总比不到好。

对于DOC文件,此方法不起作用。

+0

我想执行此代码,但它不工作..我错过了什么? – Sanuj 2016-09-17 09:55:33

+0

检查系统上是否存在unzip命令。你正在编写哪个操作系统? – 2016-09-17 18:41:38

+0

虽然我的实际服务器是Linux,但我在Windows上尝试。 但是我使用了ZipArchieve,所以我的问题现在已经解决了,关于这个代码我无法在windows上执行。 – Sanuj 2016-09-20 06:25:58