【问题标题】:Converting Excel to XML - Output format problem将 Excel 转换为 XML - 输出格式问题
【发布时间】: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 的实际文本输出。

&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;Manifest&gt;&lt;Header&gt;&lt;Version&gt;2.13&lt;/Version&gt;&lt;AccountNumber/&gt;&lt;PackageCount&gt;155&lt;/PackageCount&gt;&lt;FileDateTime&gt;2021-12-09 10:28&lt;/FileDateTime&gt;&lt;TimeZone&gt;UTC&lt;/TimeZone&gt;&lt;FileName&gt;Manifest--PRDZARA-00075955.xml&lt;/FileName&gt;&lt;Warehouse/&gt;&lt;WarehouseCode/&gt;&lt;BrandCode/&gt;&lt;/Header&gt;&lt;Package&gt;&lt;EswShipmentReference&gt;6001012837067&lt;/EswShipmentReference&gt;&lt;CustomerReference&gt;420114379400109898642807925833&lt;/CustomerReference&gt;&lt;CarrierId&gt;&lt;/CarrierId&gt;&lt;CarrierReference&gt;&lt;/CarrierReference&gt;&lt;ServiceLevel&gt;&lt;/ServiceLevel&gt;&lt;CarrierServiceDescription&gt;&lt;/CarrierServiceDescription&gt;&lt;EventCode&gt;&lt;/EventCode&gt;&lt;EventReasonCode&gt;&lt;/EventReasonCode&gt;&lt;Weight&gt;0.1&lt;/Weight&gt;&lt;WeightUnit&gt;LBS&lt;/WeightUnit&gt;&lt;VolumetricWeight&gt;&lt;/VolumetricWeight&gt;&lt;VolumetricWeightUnit&gt;&lt;/VolumetricWeightUnit&gt;&lt;DimUnit&gt;IN&lt;/DimUnit&gt;&lt;DimHeight&gt;3.4&lt;/DimHeight&gt;&lt;DimLength&gt;11.8&lt;/DimLength&gt;&lt;DimWidth&gt;5&lt;/DimWidth&gt;&lt;ShippingValue&gt;&lt;/ShippingValue&gt;&lt;ShippingValueCurrencyCode&gt;&lt;/ShippingValueCurrencyCode&gt;&lt;ProcessedDate&gt;&lt;/ProcessedDate&gt;&lt;BillingCharge&gt;&lt;/BillingCharge&gt;&lt;ConsigneeAddress1&gt;&lt;/ConsigneeAddress1&gt;&lt;ConsigneeAddress2&gt;&lt;/ConsigneeAddress2&gt;&lt;ConsigneeCity&gt;&lt;/ConsigneeCity&gt;&lt;ConsigneeRegion&gt;&lt;/ConsigneeRegion&gt;&lt;ConsigneePostalCode&gt;&lt;/ConsigneePostalCode&gt;&lt;ConsigneeCountry&gt;NZ&lt;/ConsigneeCountry&gt;&lt;PalletId&gt;&lt;/PalletId&gt;&lt;AdditionalCarrierData1&gt;&lt;/AdditionalCarrierData1&gt;&lt;AdditionalCarrierData2&gt;&lt;/AdditionalCarrierData2&gt;&lt;AdditionalCarrierData3&gt;&lt;/AdditionalCarrierData3&gt;&lt;AdditionalCarrierData4&gt;&lt;/AdditionalCarrierData4&gt;&lt;AdditionalCarrierData5&gt;&lt;/AdditionalCarrierData5&gt;&lt;/Package&gt;&lt;Package&gt;&lt;EswShipmentReference&gt;6001012837068&lt;/EswShipmentReference&gt;&lt;CustomerReference&gt;420114379400109898642807925832&lt;/CustomerReference&gt;&lt;CarrierId&gt;&lt;/CarrierId&gt;&lt;CarrierReference&gt;&lt;/CarrierReference&gt;&lt;ServiceLevel&gt;&lt;/ServiceLevel&gt;&lt;CarrierServiceDescription&gt;&lt;/CarrierServiceDescription&gt;&lt;EventCode&gt;&lt;/EventCode&gt;&lt;EventReasonCode&gt;&lt;/EventReasonCode&gt;&lt;Weight&gt;0.3&lt;/Weight&gt;&lt;WeightUnit&gt;LBS&lt;/WeightUnit&gt;&lt;VolumetricWeight&gt;&lt;/VolumetricWeight&gt;&lt;VolumetricWeightUnit&gt;&lt;/VolumetricWeightUnit&gt;&lt;DimUnit&gt;IN&lt;/DimUnit&gt;&lt;DimHeight&gt;3.5&lt;/DimHeight&gt;&lt;DimLength&gt;12&lt;/DimLength&gt;&lt;DimWidth&gt;6&lt;/DimWidth&gt;&lt;ShippingValue&gt;&lt;/ShippingValue&gt;&lt;ShippingValueCurrencyCode&gt;&lt;/ShippingValueCurrencyCode&gt;&lt;ProcessedDate&gt;&lt;/ProcessedDate&gt;&lt;BillingCharge&gt;&lt;/BillingCharge&gt;&lt;ConsigneeAddress1&gt;&lt;/ConsigneeAddress1&gt;&lt;ConsigneeAddress2&gt;&lt;/ConsigneeAddress2&gt;&lt;ConsigneeCity&gt;&lt;/ConsigneeCity&gt;&lt;ConsigneeRegion&gt;&lt;/ConsigneeRegion&gt;&lt;ConsigneePostalCode&gt;&lt;/ConsigneePostalCode&gt;&lt;ConsigneeCountry&gt;AU&lt;/ConsigneeCountry&gt;&lt;PalletId&gt;&lt;/PalletId&gt;&lt;AdditionalCarrierData1&gt;&lt;/AdditionalCarrierData1&gt;&lt;AdditionalCarrierData2&gt;&lt;/AdditionalCarrierData2&gt;&lt;AdditionalCarrierData3&gt;&lt;/AdditionalCarrierData3&gt;&lt;AdditionalCarrierData4&gt;&lt;/AdditionalCarrierData4&gt;&lt;AdditionalCarrierData5&gt;&lt;/AdditionalCarrierData5&gt;&lt;/Package&gt;&lt;/Manifest&gt;

【问题讨论】:

  • 您显示的图像肯定不是代码的输出,已经有一个实例对其进行了修改:您永远不会为空标签编写
  • 嗨@FunThomas,老实说,我对XML 不太熟悉。并且对 VBA 不太满意。所以我不明白你永远不要为空标签写 是什么意思。你指的是哪个图像? VBA 的期望输出或实际输出
  • 我指的是上面标有 “这是我使用 VBA 得到的输出。”。如果你有一个空单元格,比如说 EventCode,你写 。但是,图像显示 是空标记的有效 XML 快捷方式 - 但您不能那样写。
  • 嗨@FunThomas,看起来你是对的。我将输出粘贴到 Notepad++ 中,我认为它正在改变格式。编辑问题以添加实际的文本输出。您能否帮我确认一下输出是否正确且 XML 文件有效?
  • XML 没问题。您可以在结束标签sXML = sXML &amp; "&lt;/" &amp; Trim(Cells(iCaptionRow, icol)) &amp; "&gt;" &amp; vbCrLf 上添加一些换行符。使用 Notepad++ 的 XMLTools 插件。

标签: excel xml vba


【解决方案1】:

很抱歉给大家带来了困扰。 找出问题所在。

我正在将文本从即时窗口复制粘贴到 Notepad++。 即时窗口上的自动换行导致 Notepad++ 漂亮打印格式的换行符导致所有问题。

所以归结为我愚蠢且不熟悉 XML 编码。

还要感谢 @CDP1802 提出直接在 VBA 中添加换行符以获得正确格式的想法。

并且原始代码本身按预期工作。

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多