Excel 用VBA生成XML文件

Excel 用VBA生成XML文件,excel,xml,vba,Excel,Xml,Vba,我试图用VBA代码生成一个XML文件 我的目标是修改Excel数据,然后将这些数据导出到有效的XML文件中。只有一行数据和一行标记名,我希望将数据放在其中 如何运行所有数据并生成XML文件 一些示例数据(我的原始文件有更多的列和数据)。 (黄色数据是XML中的第一个块,绿色数据是第二个块。) 以下是XML文件的外观: LW 违约 轮胎 车轮 提雷萨特 定义 一串 提雷萨特 我的代码: 公共子生成器xml() 将sht变暗为工作表 昏暗的洛莱兹一样长,洛莱兹一样长,我一样长 调暗rBerei

我试图用VBA代码生成一个XML文件

我的目标是修改Excel数据,然后将这些数据导出到有效的XML文件中。只有一行数据和一行标记名,我希望将数据放在其中

如何运行所有数据并生成XML文件

一些示例数据(我的原始文件有更多的列和数据)。

(黄色数据是XML中的第一个块,绿色数据是第二个块。)

以下是XML文件的外观:


LW
违约
轮胎
车轮
提雷萨特
定义
一串
提雷萨特
我的代码:

公共子生成器xml()
将sht变暗为工作表
昏暗的洛莱兹一样长,洛莱兹一样长,我一样长
调暗rBereich作为范围,rng作为范围
Dim sTagO作为字符串,sTagC作为字符串,sTagOEnd作为字符串,sTagCStart作为字符串
Dim sZeile作为字符串
作为字符串的Dim strPfad
将strText设置为字符串
sTagO=“”
sTagC=“>”
sTagCStart=“尝试

选项显式
公共子代xml()
将sht变暗为工作表
Set sht=工作表(“数据”)
昏暗的洛莱兹一样长,洛莱兹一样长,我一样长
调暗rBereich作为范围,rng作为范围
Dim sZeile作为字符串
作为字符串的Dim strPfad
Dim sTag作为字符串,sTag1作为字符串,sData作为字符串
'确定最后一行
loLetzteZ=sht.Cells(Rows.Count,1).End(xlUp).Row
'确定最后一个可能的列
loLetzteS=sht.Cells(1,Columns.Count).End(xlToLeft).Column
'为我设置完整工作表的区域
设置rBereich=sht.Range(“A2:”&单元格(loLetzteZ,loLetzteS).Address)
"产出",
strPfad=ActiveWorkbook.Path&“\Data”和“.xml”
sTag1=“”
sZeile=”“&vbCrLf_
&“”&vbCrLf
“一排接一排
rBereich.行中的每个rng
带rng
'一列接一列
对于i=1到.Columns.Count
sTag=微调(短单元(1,i))
sData=微调(.Cells(1,i))
'如果标记是处理程序
如果LCase(右(sTag,7))=“handler”,则
sTag1=Split(sTag,“”(0)”删除处理程序
sZeile=sZeile&“
“这是一个结束语吗
ElseIf sTag=sTag1然后
sZeile=sZeile&&vbCrLf
ElseIf Len(sData)>0则
sZeile=sZeile&vbTab&&sData&&
其他的
sZeile=sZeile&vbTab&“
如果结束
sZeile=sZeile&vbCrLf
下一个
'用距离写行
sZeile=sZeile&vbCrLf&&vbCrLf
'打开文件并写入文本
调试。打印sZeile
'调用InDateiSchreiben(strPfad,sZeile,True)
以
下一个
MsgBox strPfad&“已创建”,vb信息
端接头
试试这个

函数GetXmlElement(sTagName作为字符串_
值作为字符串_
可选bUseEmptyTags为布尔值=False_
可选bMultiline As Boolean=False)As String
Dim sStartOpen作为字符串:sStartOpen=“”
Dim sEndOpen作为字符串:sEndOpen=“”
将插入变暗为字符串:sTab=“”
Dim sTagValSeparator作为字符串
作为字符串的Dim sValTagSeparator
如果是多行的话
sTagValSeparator=Chr(10)和sTab
sValTagSeparator=Chr(10)
如果结束
如果Len(sValue)=0且bUseEmptyTags,则
GetXmlElement=ssStartOpen&sTagName&SemptCyclose
其他的
GetXmlElement=ssStartOpen&sTagName&sClose&StagVals分离器&_
替换(S值、Chr(10)、Chr(10)和sTab)和_
sValTagSeparator
如果InStr(1,sTagName,“”)大于0,则
“标记具有属性”
sTagName=左(sTagName,InStr(1,sTagName,“”)-1)
如果结束
getxmlement=getxmlement&sEndOpen&sTagName&sClose
如果结束
端函数
函数GetXMLOutput()作为字符串
暗淡的羊驼色如长
我想我会坚持多久
Dim lCsvBeginCol尽可能长
将名称设置为字符串
像弦一样模糊的线
淡汤串
使用此工作簿。工作表(“数据”)
lLastCol=.Cells(1,Columns.Count).End(xlToLeft).Column
lCsvBeginCol=1
对于i=1到lLastCol
sTagName=.Cells(1,i)
如果左(sTagName,8)=“csvBegin”且i>lCsvBeginCol或i=lLastCol,则
"构建外部元素",
sTagName=.Cells(1,lCsvBeginCol)和“=”和.Cells(2,lCsvBeginCol)和”
如果Len(sOutput)>0,则
sOutput=sOutput和Chr(10)和Chr(10)
如果结束
sOutput=sOutput&getxmlement(sTagName,relements,True,True)
lCsvBeginCol=i
罪过=“”
如果我是lCsvBeginCol的话
"构建内部要素",
如果Len(罪过)>0,则罪过=罪过&Chr(10)
SinneRelations=SinneRelations&GetXmlElement(sTagName,.Cells(2,i),True)
如果结束
接下来我
sOutput=GetXmlElement(“NmLoader”,sOutput,True,True)
sOutput=”“&Chr(10)&Chr(10)&sOutput
GetXMLOutput=sOutput
调试。打印输出
以
端函数
Sub-GenerateXML()
将sFilename设置为字符串
sFilename=ThisWorkbook.Path&“\Data.xml”
打开输出为#1的sFilename
打印#1,GetXMLOutput
关闭#1
端接头

请提供您编写的VBA代码,有人可能会建议如何使用。我已上载了VBA代码。代码的问题是,它将结束标记和开始标记设置错误。标记的数据应为
单元格(2,I)
,因为1有ta