在C#/ .NET中,我可以将DOCX文件作为ZipPackage
打开,然后通过将它们设为PackagePart
并读取/写入{{1}来单独操作其XML部分。使用Stream
。
据我所知,VBA距离拥有此功能还有一百万英里(特别是考虑到经过大量的网络搜索后我没有发现任何相关信息),但我只是想查一下:可以任何VBA爱好者确认或否认VBA是否具有某种内置功能来操作DOCX .GetStream()
,或者您是否几乎必须从头开始编写自己的VBA DOCX解析器?
答案 0 :(得分:1)
大多数情况下,答案是肯定的,但是有一个肯定的亮点。
关于从其流中管理PackagePart
的具体问题。您可以使用某种“解压缩”实用程序,然后了解OPC结构,在Part
中导航到您想要的内容并使用XSLT或其他XML操作技术进行更改 - 但您不会能够在ActiveDocument
上执行此操作,因为它的流已经被打开使用了。您可以使用VBA创建它的副本并以非常麻烦的方式操纵它,当您的操作完成后,让VBA关闭并删除当前ActiveDocument
并打开您操作的那个作为新{{1} }。
另一方面,有一种方法可以从VBA操作当前ActiveDocument
的WordprocessingML,但这样做非常困难。有一个打开的文档,选择一些东西,然后到VBE。然后运行:
ActiveDocument
您将在即时窗口中看到所有WordprocessingML吐出。这实际上是“Flat OPC WordprocessingML”,因为它全部保存在XML的单字符串中。通过使用Sub InjectXML()
Dim wd As Document: Set wd = ActiveDocument
Debug.Print wd.Range.WordOpenXML
End Sub
,您可以在技术上将Flat OPC-type of WordprocessingML插回到所选位置的文档中。使用C#通过interop和Linq-to-XML执行此操作的人Here's an example。在VBA中这样做会非常困难。
所以,答案主要是“不”,但有点“是”。
答案 1 :(得分:0)
你没有陈述你的最终目标,但我猜一种可能性是使用Microsoft.office.interop.word来操纵word文档。