У меня есть код VBA, который записывает таблицу Excel в XML-файл (на самом деле запись XML-файла построчно, теги равны заголовкам столбцов).
Это код, это довольно просто.
Sub MakeXML(iCaptionRow As Integer, iDataStartRow As Integer, sOutputFileName As String)
Dim Q As String
Dim NodeName As String
Dim AtributName As String
Application.ScreenUpdating = False
Q = Chr$(34)
Dim sXML As String
sXML = "<?xml version=" & Q & "1.0" & Q & " encoding=" & Q & "UTF-8" & Q & "?>"
sXML = sXML & "<root>"
NodeName = "node"
AtributName = "test"
''--determine count of columns
Dim iColCount As Integer
iColCount = 1
While Trim$(Cells(iCaptionRow, iColCount)) > ""
iColCount = iColCount + 1
Wend
Dim iRow As Integer
iRow = iDataStartRow
While Cells(iRow, 1) > ""
sXML = sXML & "<" & NodeName & " type=" & Q & AtributName & Q & " id=" & Q & iRow & Q & ">"
For icol = 1 To iColCount - 1
sXML = sXML & "<" & Trim$(Cells(iCaptionRow, icol)) & ">"
sXML = sXML & Trim$(Cells(iRow, icol))
sXML = sXML & "</" & Trim$(Cells(iCaptionRow, icol)) & ">"
Next
sXML = sXML & "</" & NodeName & ">"
iRow = iRow + 1
Wend
sXML = sXML & "</root>"
Dim nDestFile As Integer, sText As String
''Close any open text files
Close
''Get the number of the next free text file
nDestFile = FreeFile
''Write the entire file to sText
Open sOutputFileName For Output As #nDestFile
Print #nDestFile, sXML
Close
Application.ScreenUpdating = True
End Sub
Sub ExcelToXml()
Dim FileName As String
FileName = InputBox("Dateinamen eingeben:")
Call MakeXML(1, 2, ActiveWorkbook.Path & "\" & FileName & ".xml")
End Sub
Проблема, с которой я столкнулся, возникает в файлах размером около 2000 строк (также зависит от количества столбцов): Excel зависает, и мне приходится его убивать. Я предполагаю, что может быть проблема с памятью. Как я могу сделать это более стабильным?
Спасибо!