我需要自动化选择数据范围的过程。
现在,系统会提示用户通过输入框输入数据范围,并使用该数据创建一个XML文件,但我需要它,以便脚本从Excel工作表中获取数据范围,在该工作表中,数据范围是在单元格Excel sheet example中指定的
最后,XML文件应如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
<DeclarationFile>
<R13>
<K7>5555.555 </K7>
<K8>333.333 </K8>
<K9>22.22 </K9>
</R13>
<R14>
<K7>1.111 </K7>
<K8>2.222 </K8>
<K9>4.4444444 </K9>
</R14>
<R17>
<K7>444.44 </K7>
<K8>333.333 </K8>
<K9>9.999 </K9>
</R17>
</DeclarationFile>
当前脚本代码:
Sub CreateXMLFile()
Const THE_FOLDER As String = "C:\"
Dim ws As Worksheet, rngData As Range, fName As String, rw As Long, col As Long
Dim xml As String, tagId As String, tagVal As String, v
fName = "C:\EDS\xml1.xml"
On Error Resume Next
Set rngData = Application.InputBox("2. Enter the range of data (Including Headers):", _
"CreateXMLFile", Type:=8)
On Error Resume Next
If rngData Is Nothing Then
Debug.Print "Range not specified"
Exit Sub
End If
Open fName For Output As #1
Print #1, "<?xml version=""1.0"" encoding=""ISO-8859-1""?>"
Print #1, "<DeclarationFile>"
For rw = 2 To rngData.Rows.Count
tagId = rngData.Cells(rw, 1).Value
Print #1, "<" & tagId & ">"
For col = 2 To rngData.Columns.Count
tagVal = rngData.Cells(1, col).Value
v = rngData.Cells(rw, col).Value
Print #1, "<" & tagVal & ">" & Replace(CheckForm(v), "&", "+") & "</" & tagVal & ">"
Next col
Print #1, "</" & tagId & ">"
Next rw
Print #1, "</DeclarationFile>"
Open fName For Output As #1
Close #1
MsgBox fName & " created." & vbLf & "Done", vbOKOnly + vbInformation, "CreateXMLFile"
Debug.Print fName & " saved."
End Sub
Function CheckForm(v) As String
If IsNumeric(v) Then v = Format(v, "#.######## ;(0.########)")
CheckForm = CStr(v)
End Function
我尝试将A1单元格中的范围转换为字符串变量,然后再转换为rngData,但结果只得到一个空的XML文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<DeclarationFile>
</DeclarationFile>
我也尝试过使用Range(),但总是出错。
任何帮助都是感激的!
3条答案
按热度按时间2eafrhcq1#
由于XML不完全是文本文件,而是具有编码和树结构的标记文件,因此请考虑使用MSXML,这是一个全面的符合W3C标准的XML API库,您可以使用它通过DOM方法(
createElement
、appendChild
、setAttribute
)而不是连接文本字符串来构建XML。在VBA中,您可以通过早期绑定或后期绑定引用MSXML库,并且可以从Excel数据迭代构建树,如下所示。此外,MSXML还支持XSLT 1.0,这是一种用于转换XML文件的专用语言。下面运行Identity Transform,以使用换行符和缩进来漂亮地打印输出。否则,所有内容将呈现在一行上。
此外,让用户输入 * 完整 * 绝对范围路径以包括工作表名称(例如,
Sheet1!A1:Z50
)XSLT*(保存为.xsl,一种特殊的.xml文件,可在VBA中读取)*
VBA语言
6rvt4ljy2#
我发现在xml中找到对表数据的 * 直接 * 访问非常有吸引力,因为它不涉及
以创建期望形式的XML文件。
因此,您可以通过
rng.Value(xlRangeValueMSPersistXML)
或rng.Value(12)
转换 * 电子表格数据(1)(可以 * 直接 * 使用)以及格式良好的xml内容**(2)。XSLT转换(4)将根据单独的xsl内容字符串(3)中的逻辑执行。
4xy9mtcn3#
范围方法有效,始终标识范围所在的工作表