Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Excel工作表转换为XML时出错_Xml_Excel_Vba - Fatal编程技术网

将Excel工作表转换为XML时出错

将Excel工作表转换为XML时出错,xml,excel,vba,Xml,Excel,Vba,您好,我想将大型excel工作表转换为特定文件夹中的xml文件。为此,我阅读了问题()。我尝试将其应用并稍作调整,使其适合excel格式: 调整代码后,看起来如下所示: Sub xmlPerRow() sTemplateXML = _ "<?xml version='1.0'?>" + vbNewLine + "<data>" + vbNewLine + "<Grai>" + vbNewLine + "</Grai>" + v

您好,我想将大型excel工作表转换为特定文件夹中的xml文件。为此,我阅读了问题()。我尝试将其应用并稍作调整,使其适合excel格式:

调整代码后,看起来如下所示:

Sub xmlPerRow()

 sTemplateXML = _
        "<?xml version='1.0'?>" + vbNewLine + "<data>" + vbNewLine + "<Grai>" + vbNewLine + "</Grai>" + vbNewLine + _
        "   <DayDateOut>" + vbNewLine + "   </DayDateOut>" + vbNewLine + "   <Filler>" + vbNewLine + "   </Filler>" + vbNewLine + _
        "   <FillerCountry>" + vbNewLine + "   </FillerCountry>" + vbNewLine + "   <Retailer>" + vbNewLine + "   </Retailer>" + vbNewLine + _
        "   <RetailerCountry>" + vbNewLine + "   </RetailerCountry>" + vbNewLine + "   <Days>" + vbNewLine + "   </Days>" + vbNewLine + _
        "   <DayBack>" + vbNewLine + "   </DayBack>" + vbNewLine + "   <DateIn>" + vbNewLine + "   </DateIn>" + vbNewLine + _
        "   <BrokenCode>" + vbNewLine + "   </BrokenCode>" + vbNewLine + "   <Broken>" + vbNewLine + "   </Broken>" + vbNewLine + _
        "   <TotalCycles>" + vbNewLine + "   </TotalCycles>" + vbNewLine + "</data>" + vbNewLine

 Set doc = CreateObject("MSXML2.DOMDocument")
 doc.async = False
 doc.validateOnParse = False
 doc.resolveExternals = False

 With ActiveWorkbook.Worksheets(1)
  lLastRow = .UsedRange.Rows.Count

  For lRow = 2 To lLastRow
   sFile = .Cells(lRow, 1).Value & ".xml"
   sGrai = .Cells(lRow, 1).Value
   sDayDateOut = .Cells(lRow, 2).Value
   sFiller = .Cells(lRow, 3).Value
   sRetailer = .Cells(lRow, 4).Value
   sRetailerCountry = .Cells(lRow, 5).Value
   sDays = .Cells(lRow, 6).Value
   sDayBack = .Cells(lRow, 7).Value
   sDateIn = .Cells(lRow, 8).Value
   sBrokenCode = .Cells(lRow, 9).Value
   sBroken = .Cells(lRow, 10).Value
   sTotalCycles = .Cells(lRow, 11).Value

   doc.LoadXML sTemplateXML
   doc.getElementsByTagName("Grai")(0).appendChild doc.createTextNode(sGrai)
   doc.getElementsByTagName("DayDateOut")(0).appendChild doc.createTextNode(sDayDateOut)
   doc.getElementsByTagName("Filler")(0).appendChild doc.createTextNode(sFiller)
   doc.getElementsByTagName("RetailerCountry")(0).appendChild doc.createTextNode(sRetailerCountry)
   doc.getElementsByTagName("Retailer")(0).appendChild doc.createTextNode(sRetailer)
   doc.getElementsByTagName("Days")(0).appendChild doc.createTextNode(sDays)
   doc.getElementsByTagName("DayBack")(0).appendChild doc.createTextNode(sDayBack)
   doc.getElementsByTagName("DateIn")(0).appendChild doc.createTextNode(sDateIn)
   doc.getElementsByTagName("BrokenCode")(0).appendChild doc.createTextNode(sBrokenCode)
   doc.getElementsByTagName("Broken")(0).appendChild doc.createTextNode(sBroken)
   doc.getElementsByTagName("TotalCycles")(0).appendChild doc.createTextNode(sTotalCycles)
   doc.Save sFile
  Next

 End With
End Sub
评论如下:

Error code 91: Object variable or bock variable is not set

您能帮我一下吗?

根据Ambi的评论,正确且有效的vba脚本是:

Sub xmlPerRow()

 sTemplateXML = _
        "<?xml version='1.0'?>" + vbNewLine + "<data>" + vbNewLine + "<Grai>" + vbNewLine + "</Grai>" + vbNewLine + _
        "   <DayDateOut>" + vbNewLine + "   </DayDateOut>" + vbNewLine + "   <Filler>" + vbNewLine + "   </Filler>" + vbNewLine + _
        "   <FillerCountry>" + vbNewLine + "   </FillerCountry>" + vbNewLine + "   <Retailer>" + vbNewLine + "   </Retailer>" + vbNewLine + _
        "   <RetailerCountry>" + vbNewLine + "   </RetailerCountry>" + vbNewLine + "   <Days>" + vbNewLine + "   </Days>" + vbNewLine + _
        "   <DayBack>" + vbNewLine + "   </DayBack>" + vbNewLine + "   <DateIn>" + vbNewLine + "   </DateIn>" + vbNewLine + _
        "   <BrokenCode>" + vbNewLine + "   </BrokenCode>" + vbNewLine + "   <Broken>" + vbNewLine + "   </Broken>" + vbNewLine + _
        "   <TotalCycles>" + vbNewLine + "   </TotalCycles>" + vbNewLine + "</data>" + vbNewLine

 Set doc = CreateObject("MSXML2.DOMDocument")
 doc.async = False
 doc.validateOnParse = False
 doc.resolveExternals = False

 With ActiveWorkbook.Worksheets(1)
  lLastRow = .UsedRange.Rows.Count

  For lRow = 2 To lLastRow
   sFile = "Grai_" & .Cells(lRow, 1).Value & ".xml"
   Dim sGrai As String
   sGrai = CStr(.Cells(lRow, 1).Value)
   sDayDateOut = .Cells(lRow, 2).Value
   sFiller = .Cells(lRow, 3).Value
   sFillerCountry = .Cells(lRow, 4).Value
   sRetailer = .Cells(lRow, 5).Value
   sRetailerCountry = .Cells(lRow, 6).Value
   sDays = .Cells(lRow, 7).Value
   sDayBack = .Cells(lRow, 8).Value
   sDateIn = .Cells(lRow, 9).Value
   sBrokenCode = .Cells(lRow, 10).Value
   sBroken = .Cells(lRow, 11).Value
   sTotalCycles = .Cells(lRow, 12).Value

   doc.LoadXML sTemplateXML
   doc.getElementsByTagName("Grai")(0).appendChild doc.createTextNode(sGrai)
   doc.getElementsByTagName("DayDateOut")(0).appendChild doc.createTextNode(sDayDateOut)
   doc.getElementsByTagName("Filler")(0).appendChild doc.createTextNode(sFiller)
   doc.getElementsByTagName("RetailerCountry")(0).appendChild doc.createTextNode(sRetailerCountry)
   doc.getElementsByTagName("Retailer")(0).appendChild doc.createTextNode(sRetailer)
   doc.getElementsByTagName("Days")(0).appendChild doc.createTextNode(sDays)
   doc.getElementsByTagName("DayBack")(0).appendChild doc.createTextNode(sDayBack)
   doc.getElementsByTagName("DateIn")(0).appendChild doc.createTextNode(sDateIn)
   doc.getElementsByTagName("BrokenCode")(0).appendChild doc.createTextNode(sBrokenCode)
   doc.getElementsByTagName("Broken")(0).appendChild doc.createTextNode(sBroken)
   doc.getElementsByTagName("TotalCycles")(0).appendChild doc.createTextNode(sTotalCycles)
   doc.Save sFile
  Next

 End With
End Sub
Sub-xmlPerRow()
sTemplateXML=_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine
Set doc=CreateObject(“MSXML2.DOMDocument”)
doc.async=False
doc.validateOnParse=False
doc.resolveExternals=False
使用Active工作簿。工作表(1)
lLastRow=.UsedRange.Rows.Count
对于lRow=2至lLastRow
sFile=“Grai_”和.Cells(lRow,1).Value和.xml”
作为字符串的Dim sGrai
sGrai=CStr(.Cells(lRow,1).Value)
sDayDateOut=.Cells(lRow,2).Value
sFiller=.Cells(lRow,3).Value
sFillerCountry=.Cells(lRow,4).Value
sRetailer=.Cells(lRow,5).Value
sRetailerCountry=.Cells(lRow,6).Value
星期四=.Cells(lRow,7).Value
sDayBack=.Cells(lRow,8).Value
sDateIn=.Cells(lRow,9).Value
sBrokenCode=.Cells(lRow,10).Value
sBroken=.Cells(lRow,11).Value
sTotalCycles=.Cells(lRow,12).Value
doc.LoadXML sTemplateXML
getElementsByTagName(“Grai”)(0).appendChild doc.createTextNode(sGrai)
doc.getElementsByTagName(“DayDateOut”)(0.appendChild doc.createTextNode(sDayDateOut)
doc.getElementsByTagName(“填充”)(0).appendChild doc.createTextNode(sFiller)
doc.getElementsByTagName(“RetailerCountry”)(0.appendChild doc.createTextNode(sRetailerCountry)
doc.getElementsByTagName(“零售商”)(0).appendChild doc.createTextNode(sRetailer)
doc.getElementsByTagName(“天”)(0)。appendChild doc.createTextNode(星期四)
doc.getElementsByTagName(“DayBack”)(0.appendChild doc.createTextNode(sDayBack)
doc.getElementsByTagName(“DateIn”)(0.appendChild doc.createTextNode(sDateIn)
doc.getElementsByTagName(“BrokenCode”)(0).appendChild doc.createTextNode(sBrokenCode)
doc.getElementsByTagName(“断开”)(0).appendChild doc.createTextNode(sBroken)
doc.getElementsByTagName(“TotalCycles”)(0.appendChild doc.createTextNode(sTotalCycles)
保存文件
下一个
以
端接头

根据Ambi的评论,更正后的vba脚本可以正常工作:

Sub xmlPerRow()

 sTemplateXML = _
        "<?xml version='1.0'?>" + vbNewLine + "<data>" + vbNewLine + "<Grai>" + vbNewLine + "</Grai>" + vbNewLine + _
        "   <DayDateOut>" + vbNewLine + "   </DayDateOut>" + vbNewLine + "   <Filler>" + vbNewLine + "   </Filler>" + vbNewLine + _
        "   <FillerCountry>" + vbNewLine + "   </FillerCountry>" + vbNewLine + "   <Retailer>" + vbNewLine + "   </Retailer>" + vbNewLine + _
        "   <RetailerCountry>" + vbNewLine + "   </RetailerCountry>" + vbNewLine + "   <Days>" + vbNewLine + "   </Days>" + vbNewLine + _
        "   <DayBack>" + vbNewLine + "   </DayBack>" + vbNewLine + "   <DateIn>" + vbNewLine + "   </DateIn>" + vbNewLine + _
        "   <BrokenCode>" + vbNewLine + "   </BrokenCode>" + vbNewLine + "   <Broken>" + vbNewLine + "   </Broken>" + vbNewLine + _
        "   <TotalCycles>" + vbNewLine + "   </TotalCycles>" + vbNewLine + "</data>" + vbNewLine

 Set doc = CreateObject("MSXML2.DOMDocument")
 doc.async = False
 doc.validateOnParse = False
 doc.resolveExternals = False

 With ActiveWorkbook.Worksheets(1)
  lLastRow = .UsedRange.Rows.Count

  For lRow = 2 To lLastRow
   sFile = "Grai_" & .Cells(lRow, 1).Value & ".xml"
   Dim sGrai As String
   sGrai = CStr(.Cells(lRow, 1).Value)
   sDayDateOut = .Cells(lRow, 2).Value
   sFiller = .Cells(lRow, 3).Value
   sFillerCountry = .Cells(lRow, 4).Value
   sRetailer = .Cells(lRow, 5).Value
   sRetailerCountry = .Cells(lRow, 6).Value
   sDays = .Cells(lRow, 7).Value
   sDayBack = .Cells(lRow, 8).Value
   sDateIn = .Cells(lRow, 9).Value
   sBrokenCode = .Cells(lRow, 10).Value
   sBroken = .Cells(lRow, 11).Value
   sTotalCycles = .Cells(lRow, 12).Value

   doc.LoadXML sTemplateXML
   doc.getElementsByTagName("Grai")(0).appendChild doc.createTextNode(sGrai)
   doc.getElementsByTagName("DayDateOut")(0).appendChild doc.createTextNode(sDayDateOut)
   doc.getElementsByTagName("Filler")(0).appendChild doc.createTextNode(sFiller)
   doc.getElementsByTagName("RetailerCountry")(0).appendChild doc.createTextNode(sRetailerCountry)
   doc.getElementsByTagName("Retailer")(0).appendChild doc.createTextNode(sRetailer)
   doc.getElementsByTagName("Days")(0).appendChild doc.createTextNode(sDays)
   doc.getElementsByTagName("DayBack")(0).appendChild doc.createTextNode(sDayBack)
   doc.getElementsByTagName("DateIn")(0).appendChild doc.createTextNode(sDateIn)
   doc.getElementsByTagName("BrokenCode")(0).appendChild doc.createTextNode(sBrokenCode)
   doc.getElementsByTagName("Broken")(0).appendChild doc.createTextNode(sBroken)
   doc.getElementsByTagName("TotalCycles")(0).appendChild doc.createTextNode(sTotalCycles)
   doc.Save sFile
  Next

 End With
End Sub
Sub-xmlPerRow()
sTemplateXML=_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+“”+vbNewLine+vbNewLine+_
“”+vbNewLine+“”+vbNewLine+“”+vbNewLine
Set doc=CreateObject(“MSXML2.DOMDocument”)
doc.async=False
doc.validateOnParse=False
doc.resolveExternals=False
使用Active工作簿。工作表(1)
lLastRow=.UsedRange.Rows.Count
对于lRow=2至lLastRow
sFile=“Grai_”和.Cells(lRow,1).Value和.xml”
作为字符串的Dim sGrai
sGrai=CStr(.Cells(lRow,1).Value)
sDayDateOut=.Cells(lRow,2).Value
sFiller=.Cells(lRow,3).Value
sFillerCountry=.Cells(lRow,4).Value
sRetailer=.Cells(lRow,5).Value
sRetailerCountry=.Cells(lRow,6).Value
星期四=.Cells(lRow,7).Value
sDayBack=.Cells(lRow,8).Value
sDateIn=.Cells(lRow,9).Value
sBrokenCode=.Cells(lRow,10).Value
sBroken=.Cells(lRow,11).Value
sTotalCycles=.Cells(lRow,12).Value
doc.LoadXML sTemplateXML
getElementsByTagName(“Grai”)(0).appendChild doc.createTextNode(sGrai)
doc.getElementsByTagName(“DayDateOut”)(0.appendChild doc.createTextNode(sDayDateOut)
doc.getElementsByTagName(“填充”)(0).appendChild doc.createTextNode(sFiller)
doc.getElementsByTagName(“RetailerCountry”)(0.appendChild doc.createTextNode(sRetailerCountry)
doc.getElementsByTagName(“零售商”)(0).appendChild doc.createTextNode(sRetailer)
doc.getElementsByTagName(“天”)(0)。appendChild doc.createTextNode(星期四)
doc.getElementsByTagName(“DayBack”)(0.appendChild doc.createTextNode(sDayBack)
doc.getElementsByTagName(“DateIn”)(0.appendChild doc.createTextNode(sDateIn)
doc.getElementsByTagName(“BrokenCode”)(0).appendChild doc.createTextNode(sBrokenCode)
doc.getElementsByTagName(“断开”)(0).appendChild doc.createTextNode(sBroken)
doc.getElementsByTagName(“TotalCycles”)(0.appendChild doc.createTextNode(sTotalCycles)
保存文件
下一个
以
端接头

使用
&
连接字符串,例如
sFile=.Cells(lRow,1).Value&“.xml”
谢谢罗宾,替换可以工作。但现在我遇到另一个错误(请参阅文章中的更新)。标记名中不能有空格,例如
日期日期
零售商国家/地区
等。请参阅:。再次感谢罗宾。正如您所看到的,我在标记中已经没有空间了,但是我仍然得到了相同的错误。您的模板有
GRAI
,并且带有错误的代码行使用
GRAI
。我相信
getElementsByTagName
是区分大小写的。使用
&
来连接字符串,例如
sFile=.Cells(lRow,1).Value&“.xml”
感谢Robin,它的替代品