【发布时间】:2017-01-10 18:20:34
【问题描述】:
我试图创建一个将 excel 工作表转换为 xml 的 VBA 宏。问题是excel数据包含特殊字符。我在论坛中搜索了一些帮助并猜测 ADOB.stream-solution 是可以解决我的问题的解决方案。但我无法将它集成到我的 VBA 代码中。到目前为止,我得到了以下代码:
Public Sub ExcelToXML()
On Error GoTo ErrorHandler
Dim colIndex As Integer
Dim rwIndex As Integer
Dim asCols() As String
Dim oWorkSheet As Worksheet
Dim sName As String
Dim lCols As Long, lRows As Long
Dim iFileNum As Integer
Set oWorkSheet = ThisWorkbook.Worksheets(1)
sName = oWorkSheet.Name
lCols = oWorkSheet.Columns.Count
lRows = oWorkSheet.Rows.Count
Set objstream = CreateObject("ADODB.Stream")
objstream.Charset = "utf-8"
objstream.Mode = 3
objstream.Type = 2
objstream.Open
ReDim asCols(lCols) As String
iFileNum = FreeFile
Open "C:\temp\test5.xml" For Output As #iFileNum
Worksheets("Sheet1").Range("A1:Z1").Replace _
What:=" ", Replacement:="_", _
SearchOrder:=xlByColumns, MatchCase:=True
For i = 0 To lCols - 1
'Assumes no blank column names
If Trim(Cells(1, i + 1).Value) = "" Then Exit For
asCols(i) = Cells(1, i + 1).Value
Next i
If i = 0 Then GoTo ErrorHandler
lCols = i
objstream.WriteText "<?xml version=""1.0"" encoding=""UTF-8""?>"
objstream.WriteText "<" & "DATA" & ">"
For i = 2 To lRows
If Trim(Cells(i, 1).Value) = "" Then Exit For
obj.stream.WriteText "<" & "PROC" & ">"
For j = 1 To lCols
If Trim(Cells(i, j).Value) <> "" Then
objstream.WriteText " <" & asCols(j - 1) & ">"
objstream.WriteText Trim(Cells(i, j).Value)
objstream.WriteText "</" & asCols(j - 1) & ">"
DoEvents 'OPTIONAL
End If
Next j
objstream.WriteText " </" & "PROC" & ">"
Next i
objstream.WriteText "</" & "DATA" & ">"
ErrorHandler:
If iFileNum > 0 Then Close #iFileNum
objstream.SaveToFile "C:\temp\test6.xml", 2
objstream.Close
Set AdoS = Nothing
Exit Sub
End Sub
很遗憾,输出文件是空的。提前感谢您能给我的任何帮助!
【问题讨论】: