通过宏将XML文件修改和替换到同一路径(Excel VBA)

wko9yo5t  于 2023-08-08  发布在  其他
关注(0)|答案(3)|浏览(154)

我的excel表中有一个自定义按钮,当用户单击它时,代码允许用户上传文件,然后代码修改上传的文件,并将修改后的内容存储在String变量s中。-

Option Explicit

Sub Button1_Click()
    Dim fso As Object, ts As Object, doc As Object
    Dim data As Object, filename As String
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    ' select file
    With Application.FileDialog(msoFileDialogFilePicker)
        If .Show <> -1 Then Exit Sub
        filename = .SelectedItems(1)
    End With
    
    ' read file and add top level
    Set doc = CreateObject("MSXML2.DOMDocument.6.0")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpentextFile(filename)
    doc.LoadXML Replace(ts.readall, "<metadata>", "<root><metadata>", 1, 1) & "</root>"
    ts.Close
    
    ' import data tag only
    Dim s As String
    Set data = doc.getElementsByTagName("data")(0)
    s = data.XML
    ' MsgBox s
    
    ' replace the original XML file with contents of variable s here
    
    If MsgBox(s & vbCrLf, vbYesNo) = vbYes Then
        Application.SendKeys ("%lt")
    Else
        MsgBox "Ok"
    End If
End Sub

字符串
假设我单击了该按钮并上传了一个XML文件C:/My Folder/sample.xml。现在,代码修改它,并更新文件(使用存储在变量s中的新内容)。下面是一个代表性的图片-(修改的内容是s变量的直接值)
x1c 0d1x的数据
如何实现上述目标?请引导...谢谢你,谢谢

wlp8pajw

wlp8pajw1#

请参见TextStream Objects的CreateTextFile方法

Set ts = fso.CreateTextFile(filename, True)
ts.Write s
ts.Close

字符串

km0tfn4u

km0tfn4u2#

为什么不通过再次加载所需的字符串(在Set data = doc.getElementsByTagName("data")(0)之后)来继续XML方法:

doc.LoadXML data.XML
    doc.Save filename

字符串

发布代码的附注

  • 值得一提的是,在加载xml字符串中插入了一个起始<root>和结束</root>标记,这有点奇怪,通过 *
doc.LoadXML Replace(ts.readall, "<metadata>", "<root><metadata>", 1, 1) & "</root>"

  • 只是一种解决方法,可以重新构建格式良好的xml输入,从而避免 *
Error `-1072896683 XML document must have a top level element.`


因此,imo 你可以考虑改变你的模式文件,使其不包含顶层的元数据,而是包含已经在设计中的后续层次结构,以提供可加载的、格式良好的xml标记。

u1ehiz5o

u1ehiz5o3#

文件中的全部数据替换““

相关问题