2013-09-20 2 views
0

Я использую формы InfoPath для сбора данных из полевых команд, и все заполненные формы сохраняются в стандартном формате XML InfoPath. Теперь я хочу импортировать все эти XML-файлы в Excel для компиляции отчетов. Я делал этот один XML-файл за раз, но это, конечно, глупо. В любом случае друг написал этот код макроса Excel VB для импорта нескольких файлов XML на вкладку листа Excel (XMLData), а затем аккуратно копировал данные на другую вкладку (результаты). Проблема заключается в том, что данные в файлах XML импортируются из последовательности в столбцы Excel. Есть ли простое исправление для этого кода? Вот Excel VB Macro код:Импорт нескольких файлов XML InfoPath в Excel

Sub ReadXML() 
    Dim strFile As String 
    MsgBox "I'll start reading please don't touch the computer" 
    Dim strPath As String 
    Dim colFiles As New Collection 
    Dim i As Integer 
    Dim wb As Workbook 
    strPath = ActiveSheet.Range("C2") 
    strFile = Dir(strPath) 
    While strFile <> "" 
     colFiles.Add strFile 
     strFile = Dir 
    Wend 
    If colFiles.Count > 0 Then 
     For i = 1 To colFiles.Count 
      Application.ScreenUpdating = False 
      Application.DisplayAlerts = False 
      strTargetFile = strPath & colFiles(i) 

      Set wb = Workbooks.OpenXML(Filename:=strTargetFile, LoadOption:=xlXmlLoadOpenXml) 
      Application.DisplayAlerts = True 

      wb.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets("XMLDATA").Range("A" & i * 3 + 1) 
      ThisWorkbook.Sheets("XMLDATA").Rows(i * 3 + 3).Copy ThisWorkbook.Sheets("Result").Range("A" & i + 2) 
      wb.Close False 
      Application.ScreenUpdating = True 
      ActiveSheet.Range("P2") = i 
     Next i 
     ThisWorkbook.Sheets("XMLDATA").Rows(4).Copy ThisWorkbook.Sheets("Result").Rows(1) 
     ThisWorkbook.Sheets("XMLDATA").Rows(5).Copy ThisWorkbook.Sheets("Result").Rows(2) 
     MsgBox "I'm Done!" 
    End If 
End Sub 

Может быть, есть более простой более элегантное решение для импорта InfoPath XML файлов в Excel, просто не нашли еще. Ваша помощь очень ценится.

ответ

0

Простейшим изменением было бы использовать параметр OpenXML'sStylesheets, чтобы указать таблицу стилей XSLT для форматирования XML так, как вы хотите. Затем вы можете извлечь содержимое в любом порядке и в формате, который вам нравится, как указано в таблице стилей.

Более сложные изменения (и мой предпочтительный метод для такого рода вещи), чтобы загрузить содержимое в DOMDocument объекте и использовать такие функции как selectNodes и selectSingleNode извлечь содержимое, которое требуется.

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