zoukankan      html  css  js  c++  java
  • VBA读写XML文件

    'Write XML file
    Sub WriteXML(fpa$, fn$)
        Dim xmlfile As String
        xmlfile = ThisWorkbook.Path & ".Export.xml"
        CreateXml xmlfile, fpa, fn
    End Sub
    
    Function CreateXml(xmlfile$, fpa$, fn$)
        Dim xdoc As Object
        Dim rootNode As Object
        Dim header As Object
        Dim newNode As Object
        Dim tNode As Object
    
        Set xdoc = CreateObject("MSXML2.DOMDocument")
        Set rootNode = xdoc.createElement("FilePath")
        Set xdoc.DocumentElement = rootNode
        'xDoc.Load xmlFile
        Set header = xdoc.createProcessingInstruction("xml", "version='1.0' encoding='Unicode'")
        xdoc.InsertBefore header, xdoc.ChildNodes(0)
    
        Set newNode = xdoc.createElement("File")
        Set tNode = xdoc.DocumentElement.appendChild(newNode)
        tNode.setAttribute "type", "folder"
    
        Set newNode = xdoc.createElement("path")
        Set tNode = xdoc.DocumentElement.ChildNodes.Item(0).appendChild(newNode)
        tNode.appendChild (xdoc.createTextNode(fpa))
    
        Set newNode = xdoc.createElement("File")
        Set tNode = xdoc.DocumentElement.appendChild(newNode)
        tNode.setAttribute "type", "file"
    
        Set newNode = xdoc.createElement("name")
        Set tNode = xdoc.DocumentElement.ChildNodes.Item(1).appendChild(newNode)
        tNode.appendChild (xdoc.createTextNode(fn))
        
        Set newNode = Nothing
        Set tNode = Nothing
    
        Dim xmlStr As String
        xmlStr = PrettyPrintXml(xdoc)
        WriteUtf8WithoutBom xmlfile, xmlStr
    
        Set rootNode = Nothing
        Set xdoc = Nothing
    
        'MsgBox xmlFile & "XML file exported sucessfully!"
       ' Call export_data(fpa, fn)
    End Function
    
    'Formatting XML,set wrapping and indentation
    Function PrettyPrintXml(xmldoc) As String
        Dim reader As Object
        Dim writer As Object
        Set reader = CreateObject("Msxml2.SAXXMLReader.6.0")
        Set writer = CreateObject("Msxml2.MXXMLWriter.6.0")
        writer.indent = True
        writer.omitXMLDeclaration = True
        reader.contentHandler = writer
        reader.Parse (xmldoc)
        PrettyPrintXml = writer.Output
    End Function
    
    'UTF-8 without BOM
    Function WriteUtf8WithoutBom(filename As String, content As String)
        Dim stream As New ADODB.stream
        stream.Open
        stream.Type = adTypeText
        stream.Charset = "utf-8"
        stream.WriteText "<?xml version=" & Chr(34) & "1.0" & Chr(34) & _
                         " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "?>" & vbCrLf
        stream.WriteText content
    
        'Top 3 character move sets£¨0xEF,0xBB,0xBF£©
        stream.Position = 3
    
        Dim newStream As New ADODB.stream
        newStream.Type = adTypeBinary
        newStream.Mode = adModeReadWrite
        newStream.Open
    
        stream.CopyTo newStream
        stream.Flush
        stream.Close
    
        newStream.SaveToFile filename, adSaveCreateOverWrite
        newStream.Flush
        newStream.Close
    End Function
    
    Sub export_data()
    Dim xdoc As New DOMDocument60 'Declare and create XML object
    Dim b As Boolean, root As IXMLDOMElement
    Dim fp As String
    Dim fn As String
    Dim wb As Workbook
    Dim arr() As String
    Dim i As Integer
    Dim j As Integer
    Dim app As Object
    Dim wbs As Workbook
    Dim ws As Worksheet
    Dim irow As Integer
    On Error Resume Next
    With ThisWorkbook.Sheets(1)
    b = xdoc.Load(ThisWorkbook.Path & ".Export.xml")
    If b = True Then
        Set root = xdoc.DocumentElement 'Get the root node
        fn = root.ChildNodes.Item(1).Text
        fp = root.ChildNodes.Item(0).Text & fn & "-" & Format(Now(), "yyyymmdd") & ".xlsx"
        irow = ThisWorkbook.Sheets(1).Range("a1000000").End(xlUp).Row
        ActiveWorkbook.Sheets(1).Copy
        ActiveWorkbook.SaveAs filename:=fp
        irow = .Range("A1000000").End(xlUp).Row
        .Range("A2:E" & irow).ClearContents
    Else
        MsgBox "Error:failed to load xml file!", 16
    End If
    End With
    End Sub
  • 相关阅读:
    将博客搬至CSDN
    smarty不渲染html页面
    开篇
    html的入门——从标签开始(1)
    java内部编码
    用base64Encoder进行编码 和base64Decoder解码
    序列化和反序列化
    HttpServletResponse类
    配置Tomcat服务器数据连接池
    SVN修改地址
  • 原文地址:https://www.cnblogs.com/luoye00/p/10979593.html
Copyright © 2011-2022 走看看