我正在尝试使用VBA从XFA表单中提取XML信息。
下面的代码将XML数据提取到一个单独的文件中,但它需要用户交互(要求用户为XML文件命名(。由于Adobe的"安全路径"要求(VBA自动化似乎无法绕过(,我已经放弃了在没有用户交互的情况下实现自动化的尝试。
Dim objPDDoc As New AcroPDDoc
Dim objJSO As Object
Dim strSafePath as String
strSafePath = ""
objPDDoc.Open (FileName)
Set objJSO = objPDDoc.GetJSObject
objJSO.xfa.host.exportdata strSafePath, 0
我更愿意做的是直接使用MSXML2.DOMDocument60解析XML信息。我希望能够做这样的事情:
Dim XMLDoc As New MSXML2.DOMDocument60
If XMLDoc.Load(objJSO.xfa.host.exportdata) = True Then
Call funcParse(XMLDoc)
End if
然而,用objJSO.xfa.host.exportdata
加载XMLDoc
是不起作用的,而且我似乎无法确定使用任何xfa.host方法/属性传递XML信息的可能性(如果有的话(。
欢迎任何帮助-同时告诉我这在VBA中是不可能的。
试试这样的东西:
myXMLstring = "<XML>BLA</XML>"
Dim xmlDoc As MSXML2.DOMDocument60
Set xmlDoc = New MSXML2.DOMDocument60
xmlDoc.LoadXML myXMLstring
请参阅以获取更好的示例:例如,请参阅此帖子:https://desmondoshiwambo.wordpress.com/2012/07/03/how-to-load-xml-from-a-local-file-with-msxml2-domdocument-6-0-and-loadxml-using-vba/
此处为原始海报。经过大约一年断断续续的研究,我找到了解决方案。
通过AccroPDDoc.GetJSObject访问JavaScript对象后,我可以使用objJSO.xfa.this.saveXML
将嵌套的XML提取为字符串。
这样,我就不必首先将嵌套的XML保存到文件中(这需要用户交互(,而是可以立即提取嵌套的XML并将其传递给解析器。
Dim objPDDoc as New AcroPDDoc
Dim objJSO as Object
Dim XMLDoc As New MSXML2.DOMDocument60
ObjPDDoc.Open (Filename)
Set objJSO = objPDDoc.GetJSObject
If XMLDoc.LoadXML (objJSO.xfa.this.saveXML) = True then
ParseXML(XMLDoc)
End if