2015-04-20 3 views
0

В первый раз, как я сказал в заголовке, я хочу импортировать XML-файл в excel. У меня есть форма в формате PDF, содержащий 6 рядов радиокнопок и 1 текстовое поле (комментариев) на представить это дает мне этот XML-файл:Как создать лист excel из xml-файла с помощью vb.net

<?xml version="1.0" encoding="UTF-8"?> 
<form1 
><Table1 
><HeaderRow xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup" 
/><Row1 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup" 
/><Row2 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup" 
/><Row3 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup" 
/><Row4 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup" 
/><Row5 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup" 
/></Table1 
><Table2 
><Row1 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup" 
/></Table2 
><Table3 
><Row1 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup" 
/><Row1 xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" xfa:dataNode="dataGroup" 
/></Table3 
><QualityWork 
>1</QualityWork 
><Ontime 
>2</Ontime 
><QualityReport 
>3</QualityReport 
><Needs 
>4</Needs 
><Comm 
>5</Comm 
><Global 
>6</Global 
><Comments 
>This is a comment</Comments 
></form1 
> 

Я пытаюсь создать vb.net программу, которая создаст лист первенствовать с данными из xml-файла.

Я попытался с помощью этого vb.net кода

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim filePath = create_xml.Text() 

    Dim m_xmld As XmlDocument 
    'Create the XML Reader 
    m_xmld = New XmlDocument() 
    m_xmld.Load(filePath) 

    Dim m_nodelist As XmlNodeList 
    Dim m_node As XmlNode 

    m_nodelist = m_xmld.SelectNodes("/form1") 


    Dim total_untokenized = "" 

    For Each m_node In m_nodelist 

     total_untokenized = m_node.ChildNodes.Item(0).InnerText 
     comments = m_node.ChildNodes.Item(1).InnerText 
    Next 

    Dim total_tokenized As Integer 
    total_tokenized = 0 

    For i = 1 To 6 
     total_tokenized = total_tokenized + Strings.Mid(total_untokenized, i, 1) 
    Next 


    Dim total_col = 7 

    Dim MyArrayList = New ArrayList(total_col) 

    MyArrayList.Add(comments) 
    For i = 1 To 6 
     MyArrayList.Add(Strings.Mid(total_untokenized, i, 1)) 
    Next 
    MyArrayList.Add(total_tokenized) 


    Dim MyArrayList2 = New ArrayList(total_col) 


    MyArrayList2.Add("QualityWork") 
    MyArrayList2.Add("Ontime") 
    MyArrayList2.Add("QualityReport") 
    MyArrayList2.Add("Needs") 
    MyArrayList2.Add("Comm") 
    MyArrayList2.Add("Global") 
    MyArrayList2.Add("Comments") 


    Dim oExcel As Object 
    Dim oBook As Object 
    Dim oSheet As Object 
    oExcel = CreateObject("Excel.Application") 
    oExcel.Visible = True 
    oBook = oExcel.Workbooks.Add 
    oSheet = oBook.Worksheets(1) 

    For col = 0 To total_col - 1 
     oSheet.Cells(1, col + 1) = MyArrayList2.Item(col) 
    Next 

    oSheet.Rows("1:1").Font.Bold = True 
    For col = 0 To total_col - 1 
     oSheet.Cells(2, col + 1) = MyArrayList.Item(col) 
    Next 
End Sub 

Но это m_nodelist, кажется, остается пустым, я всегда получаю ошибку на этой линии total_tokenized = total_tokenized + Strings.Mid(total_untokenized, i, 1)

edit1: Я пост, как я установил его ниже

+0

какую часть xml вы хотите получить? неясно, что вы пытаетесь сделать с этим токенизированным кодом. – Ezi

+0

Число 1,2,3,4,5,6 и «Это комментарий» – phil652

ответ

0

Я был в состоянии это исправить, изменив мой vb.net, как это. Изучая другие ответы, я знаю, что для этого должны быть более простые способы, но поскольку я новичок, я не хотел перезапускать с самого начала и застрять где-то в другом месте. Мне удалось изменить код, который у меня уже был.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    If create_xml.Text() = "" Then 
     MsgBox("You have not specified an XML file!") 
     Exit Sub 
    End If 
    Dim filePath = create_xml.Text() 
    Dim xlApp As Excel.Application 
    Dim xlWorkBook As Excel.Workbook 
    Dim xlWorkSheet As Excel.Worksheet 
    Dim misValue As Object = System.Reflection.Missing.Value 

    Dim ds As New DataSet 
    Dim xmlFile As XmlReader 
    Dim i, j As Integer 
    Dim totalCol As Integer = 7 
    Dim MyArrayList2 = New ArrayList(totalCol) 

    MyArrayList2.Add("QualityWork") 
    MyArrayList2.Add("Ontime") 
    MyArrayList2.Add("QualityReport") 
    MyArrayList2.Add("Needs") 
    MyArrayList2.Add("Comm") 
    MyArrayList2.Add("Global") 
    MyArrayList2.Add("Comments") 

    xlApp = New Excel.ApplicationClass 
    xlWorkBook = xlApp.Workbooks.Add(misValue) 
    xlWorkSheet = xlWorkBook.Sheets("sheet1") 

    xmlFile = XmlReader.Create(filePath, New XmlReaderSettings()) 
    ds.ReadXml(xmlFile) 

    For i = 0 To MyArrayList2.Count - 1 


     xlWorkSheet.Cells(1, i + 1) = MyArrayList2.Item(i) 
    Next 



    For i = 0 To ds.Tables(0).Rows.Count - 1 
     For j = 1 To ds.Tables(0).Columns.Count - 1 
      xlWorkSheet.Cells(2, j) = _ 
      ds.Tables(0).Rows(i).Item(j) 
     Next 
    Next 
    ' Fix first row 
    xlWorkSheet.Activate() 
    xlWorkSheet.Application.ActiveWindow.SplitRow = 1 
    xlWorkSheet.Application.ActiveWindow.FreezePanes = True 
    ' Now apply autofilter 
    Dim firstRow As Excel.Range = xlWorkSheet.Rows(1) 
    firstRow.AutoFilter(1, 
       Type.Missing, 
       Excel.XlAutoFilterOperator.xlAnd, 
       Type.Missing, 
       True) 


    xlWorkSheet.SaveAs("F:\xml2excel.xlsx") 
    xlWorkBook.Close() 
    xlApp.Quit() 

    releaseObject(xlApp) 
    releaseObject(xlWorkBook) 
    releaseObject(xlWorkSheet) 
End Sub 

Private Sub releaseObject(ByVal obj As Object) 
    Try 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) 
     obj = Nothing 
    Catch ex As Exception 
     obj = Nothing 
    Finally 
     GC.Collect() 
    End Try 

End Sub 
0

Почему бы не использовать этот простой метод:

Workbooks.OpenXML 

см here

+0

Мне сложно понять, как реализовать это в моем коде, так как нет примера – phil652

+0

Вы можете увидеть ссылку для получения более подробной информации, но я согласен с тем, что выбор этого решения потребует много модификаций, но проще сделать один раз. – Fjodr

+0

Я смог исправить это сам. См. Ответ ниже. – phil652

1

Это один из способов сделать это ...

Dim m_xmld As XmlDocument 
    'Create the XML Reader 
    m_xmld = New XmlDocument() 
    m_xmld.Load(filePath) 

    Dim QualityWork = m_xmld.GetElementsByTagName("QualityWork").Item(0).InnerText 
    Dim Ontime = m_xmld.GetElementsByTagName("Ontime").Item(0).InnerText 
    Dim QualityReport = m_xmld.GetElementsByTagName("QualityReport").Item(0).InnerText 
    Dim Needs = m_xmld.GetElementsByTagName("Needs").Item(0).InnerText 
    Dim Comm = m_xmld.GetElementsByTagName("Comm").Item(0).InnerText 
    Dim Glob = m_xmld.GetElementsByTagName("Global").Item(0).InnerText 
    Dim Comments = m_xmld.GetElementsByTagName("Comments").Item(0).InnerText 
+0

Я смог исправить это сам. См. Ответ ниже. Спасибо за попытку – phil652

+0

Я дал вам +1 за попытку! – phil652

+0

вы очень желанны. – Ezi

Смежные вопросы