2016-08-23 95 views
1

我有一個類似於下面的格式的Excel表中的一些數據。從excel表讀取數據並使用vba宏將其輸出到xml?

Colum1_Heading  Column2_Heading 
      a     1 
      b     2 
      c     3 

我想在本表數據轉換爲XML,我將始終具有相同的列數,但是行的數量不定。

XML格式是這樣的

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <tag1> 
     <tag2> 
       a - 1, 
       b - 2, 
       c - 3 
     </tag2> 
    </tag1> 
</root> 

所以我覺得應該是相當簡單的。到目前爲止,我已經開始編寫一些代碼來創建一個可寫的字符串,然後我會寫入一個新的XML文件,但我對VBA很新,所以我仍然在研究互聯網上的一堆。我輸入了標題和開始和結束標記,因爲這些標記始終是相同的。我的問題是如何讀取表格的行並以上面顯示的格式將它們寫入XML。任何幫助,將不勝感激。如果您需要任何其他信息,請告訴我。

+2

因此,如果我理解你的XML模式,你只是有一個大的文本blob,其中的工作表中的所有數據? – Comintern

+0

@Comintern是的,這是正確的 – user2560035

+0

@ Mat'sMug我正在寫這段代碼,將一個excel文件轉換成一個XML,以供現有軟件讀取。這是該軟件使用的XML模式。我無法幫助它對你沒有意義,它就是這樣。 – user2560035

回答

0

這應該讓你開始。添加一個引用到MSXML2:

Sub Test() 
    With New MSXML2.DOMDocument60 

     Dim root As IXMLDOMNode 
     Set root = .createElement("root") 

     Dim tag1 As IXMLDOMNode 
     Set tag1 = .createElement("tag1") 

     Dim tag2 As IXMLDOMNode 
     Set tag2 = .createElement("tag2") 

     tag2.Text = ReadXmlContentFromWorksheet '"a - 1,b - 2,c - 3" 

     tag1.appendChild tag2 
     root.appendChild tag1 

     .appendChild .createProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8""") 
     Set .DocumentElement = root 
     '.Save "test.xml" 
     Debug.Print .XML 

    End With 
End Sub 

輸出:

<?xml version="1.0"?> 
<root><tag1><tag2>a - 1,b - 2,c - 3</tag2></tag1></root> 

注意,垂直空白是無關緊要的


ReadXmlContentFromWorksheet功能會是這個樣子:

Private Function ReadXmlContentFromWorksheet() As String 
    Dim result As String 

    Dim lastRow As Long 
    lastRow = MyDataSheet.Range("A" & MyDataSheet.Rows.Count).End(xlUp).Row 

    Dim currentRow As Long 
    For currentRow = 1 To lastRow 
     result = result & MyDataSheet.Cells(currentRow, 1).Value & " - " _ 
         & MyDataSheet.Cells(currentRow, 2).Value 
     result = IIf(currentRow = lastRow, vbNullString, ",") 
    Next 

    ReadXmlContentFromWorksheet = result 
End Function