【发布时间】:2022-01-19 14:42:57
【问题描述】:
我的任务是从需要输入数据库系统的 excel 文件创建 XML 文件。 我从论坛here得到代码。
我根据需要的输出对其进行了修改,但有些地方不对劲,无法弄清楚是什么。 我希望你们能帮助我。
这是我使用 VBA 得到的输出。 如您所见,在“ConsigneeAdress1”标签之后出现了问题。
下面是我正在使用的代码。
Sub MakeXML()
Dim iCaptionRow As Integer
Dim iDataStartRow As Integer
Dim sOutputFileName As String
Dim Q As String
Q = Chr$(34)
Dim sXML As String
sXML = "<?xml version=" & Q & "1.0" & Q & " encoding=" & Q & "UTF-8" & Q & "?>"
sXML = sXML & "<Manifest><Header><Version>2.13</Version><AccountNumber/><PackageCount>155</PackageCount><FileDateTime>2021-12-09 10:28</FileDateTime><TimeZone>UTC</TimeZone><FileName>Manifest--PRDZARA-00075955.xml</FileName><Warehouse/><WarehouseCode/><BrandCode/></Header>"
''--determine count of columns
Dim iColCount As Integer
iColCount = 1
iCaptionRow = 1
While Trim(Cells(iCaptionRow, iColCount)) > ""
iColCount = iColCount + 1
Wend
Dim iRow As Integer
iDataStartRow = 2
iRow = iDataStartRow
While Cells(iRow, 1) > ""
sXML = sXML & "<Package>"
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 & "</Package>"
iRow = iRow + 1
Wend
sXML = sXML & "</Manifest>"
debug.print sXML
End Sub
如果你们能帮我弄清楚到底出了什么问题,我将不胜感激。
编辑: VBA 的实际文本输出。
<?xml version="1.0" encoding="UTF-8"?><Manifest><Header><Version>2.13</Version><AccountNumber/><PackageCount>155</PackageCount><FileDateTime>2021-12-09 10:28</FileDateTime><TimeZone>UTC</TimeZone><FileName>Manifest--PRDZARA-00075955.xml</FileName><Warehouse/><WarehouseCode/><BrandCode/></Header><Package><EswShipmentReference>6001012837067</EswShipmentReference><CustomerReference>420114379400109898642807925833</CustomerReference><CarrierId></CarrierId><CarrierReference></CarrierReference><ServiceLevel></ServiceLevel><CarrierServiceDescription></CarrierServiceDescription><EventCode></EventCode><EventReasonCode></EventReasonCode><Weight>0.1</Weight><WeightUnit>LBS</WeightUnit><VolumetricWeight></VolumetricWeight><VolumetricWeightUnit></VolumetricWeightUnit><DimUnit>IN</DimUnit><DimHeight>3.4</DimHeight><DimLength>11.8</DimLength><DimWidth>5</DimWidth><ShippingValue></ShippingValue><ShippingValueCurrencyCode></ShippingValueCurrencyCode><ProcessedDate></ProcessedDate><BillingCharge></BillingCharge><ConsigneeAddress1></ConsigneeAddress1><ConsigneeAddress2></ConsigneeAddress2><ConsigneeCity></ConsigneeCity><ConsigneeRegion></ConsigneeRegion><ConsigneePostalCode></ConsigneePostalCode><ConsigneeCountry>NZ</ConsigneeCountry><PalletId></PalletId><AdditionalCarrierData1></AdditionalCarrierData1><AdditionalCarrierData2></AdditionalCarrierData2><AdditionalCarrierData3></AdditionalCarrierData3><AdditionalCarrierData4></AdditionalCarrierData4><AdditionalCarrierData5></AdditionalCarrierData5></Package><Package><EswShipmentReference>6001012837068</EswShipmentReference><CustomerReference>420114379400109898642807925832</CustomerReference><CarrierId></CarrierId><CarrierReference></CarrierReference><ServiceLevel></ServiceLevel><CarrierServiceDescription></CarrierServiceDescription><EventCode></EventCode><EventReasonCode></EventReasonCode><Weight>0.3</Weight><WeightUnit>LBS</WeightUnit><VolumetricWeight></VolumetricWeight><VolumetricWeightUnit></VolumetricWeightUnit><DimUnit>IN</DimUnit><DimHeight>3.5</DimHeight><DimLength>12</DimLength><DimWidth>6</DimWidth><ShippingValue></ShippingValue><ShippingValueCurrencyCode></ShippingValueCurrencyCode><ProcessedDate></ProcessedDate><BillingCharge></BillingCharge><ConsigneeAddress1></ConsigneeAddress1><ConsigneeAddress2></ConsigneeAddress2><ConsigneeCity></ConsigneeCity><ConsigneeRegion></ConsigneeRegion><ConsigneePostalCode></ConsigneePostalCode><ConsigneeCountry>AU</ConsigneeCountry><PalletId></PalletId><AdditionalCarrierData1></AdditionalCarrierData1><AdditionalCarrierData2></AdditionalCarrierData2><AdditionalCarrierData3></AdditionalCarrierData3><AdditionalCarrierData4></AdditionalCarrierData4><AdditionalCarrierData5></AdditionalCarrierData5></Package></Manifest>
【问题讨论】:
-
您显示的图像肯定不是代码的输出,已经有一个实例对其进行了修改:您永远不会为空标签编写
。 -
嗨@FunThomas,老实说,我对XML 不太熟悉。并且对 VBA 不太满意。所以我不明白你永远不要为空标签写
是什么意思。你指的是哪个图像? VBA 的期望输出或实际输出 -
我指的是上面标有 “这是我使用 VBA 得到的输出。”。如果你有一个空单元格,比如说 EventCode,你写
。但是,图像显示 是空标记的有效 XML 快捷方式 - 但您不能那样写。 -
嗨@FunThomas,看起来你是对的。我将输出粘贴到 Notepad++ 中,我认为它正在改变格式。编辑问题以添加实际的文本输出。您能否帮我确认一下输出是否正确且 XML 文件有效?
-
XML 没问题。您可以在结束标签
sXML = sXML & "</" & Trim(Cells(iCaptionRow, icol)) & ">" & vbCrLf上添加一些换行符。使用 Notepad++ 的 XMLTools 插件。