当前位置: 首页 > 知识库问答 >
问题:

Excel:为每行(电子表格中)创建一个。xml文件(使用VBA)

傅茂实
2023-03-14

以下代码工作正常,但有一种情况除外,即ResetDate对多行具有相同的值。

VBA代码(我不是专家)

Sub testXLStoXML()
 sTemplateXML = _
        "<?xml version='1.0'?>" + vbNewLine + _
        "<E>" + vbNewLine + _
        "   <ResetDate>" + vbNewLine + _
        "   </ResetDate>" + vbNewLine + _
        "   <ValueDate>" + vbNewLine + _
        "   </ValueDate>" + vbNewLine + _
        "   <MaturityD>" + vbNewLine + _
        "   </MaturityD>" + vbNewLine + _
        "   <Rate>" + vbNewLine + _
        "   </Rate>" + vbNewLine + _
        "   <Quantity>" + vbNewLine + _
        "   </Quantity>" + vbNewLine + _
        "   <ID>" + vbNewLine + _
        "   </ID>" + vbNewLine + _
        "</E>" + 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 = Format(.Cells(lRow, 1).Value, "DD-MMM-YY")
   sBirthdate = Format(.Cells(lRow, 2).Value, "DD-MMM-YY")
   sAmount = Format(.Cells(lRow, 3).Value, "DD-MMM-YY")
   sRate = .Cells(lRow, 4).Value
   sQuantity = .Cells(lRow, 5).Value
   sID = .Cells(lRow, 6).Value
   doc.LoadXML sTemplateXML
   doc.getElementsByTagName("ResetDate")(0).appendChild doc.createTextNode(ResetDate)
   doc.getElementsByTagName("ValueDate")(0).appendChild doc.createTextNode(ValueDate)
   doc.getElementsByTagName("MaturityD")(0).appendChild doc.createTextNode(MaturityD)
  doc.getElementsByTagName("Rate")(0).appendChild doc.createTextNode(sRate)
  doc.getElementsByTagName("Quantity")(0).appendChild doc.createTextNode(sQuantity)
  doc.getElementsByTagName("ID")(0).appendChild doc.createTextNode(sID)
   doc.Save sFile
  Next

 End With
End Sub

正如您所看到的,我仅将日期的1个文件作为输出:

有什么建议吗?提前谢谢

共有1个答案

太叔志文
2023-03-14

删除文档。保存sFile并替换为以下代码:

Dim x as Long
x = Application.CountIf(.Range("A2:A" & lrow), .Cells(lRow, 1))
If  x > 1 Then doc.Save sFile & "_" & x Else doc.Save sFile

因此,您的修订代码是:

Sub testXLStoXML()
Dim x as Long
sTemplateXML = _
    "<?xml version='1.0'?>" + vbNewLine + _
    "<E>" + vbNewLine + _
    "   <ResetDate>" + vbNewLine + _
    "   </ResetDate>" + vbNewLine + _
    "   <ValueDate>" + vbNewLine + _
    "   </ValueDate>" + vbNewLine + _
    "   <MaturityD>" + vbNewLine + _
    "   </MaturityD>" + vbNewLine + _
    "   <Rate>" + vbNewLine + _
    "   </Rate>" + vbNewLine + _
    "   <Quantity>" + vbNewLine + _
    "   </Quantity>" + vbNewLine + _
    "   <ID>" + vbNewLine + _
    "   </ID>" + vbNewLine + _
    "</E>" + 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 = Format(.Cells(lRow, 1).Value, "DD-MMM-YY")
        sBirthdate = Format(.Cells(lRow, 2).Value, "DD-MMM-YY")
        sAmount = Format(.Cells(lRow, 3).Value, "DD-MMM-YY")
        sRate = .Cells(lRow, 4).Value
        sQuantity = .Cells(lRow, 5).Value
        sID = .Cells(lRow, 6).Value
        doc.LoadXML sTemplateXML
        doc.getElementsByTagName("ResetDate")(0).appendChild doc.createTextNode(ResetDate)
        doc.getElementsByTagName("ValueDate")(0).appendChild doc.createTextNode(ValueDate)
        doc.getElementsByTagName("MaturityD")(0).appendChild doc.createTextNode(MaturityD)
        doc.getElementsByTagName("Rate")(0).appendChild doc.createTextNode(sRate)
        doc.getElementsByTagName("Quantity")(0).appendChild doc.createTextNode(sQuantity)
        doc.getElementsByTagName("ID")(0).appendChild doc.createTextNode(sID)
        x = Application.CountIf(.Range("A2:A" & lrow), .Cells(lRow, 1))
        If  x > 1 Then doc.Save sFile & "_" & x Else doc.Save sFile
    Next lrow
End With

End Sub
 类似资料:
  • 我正在尝试为Excel文件中的每一行创建一个单独的XML文档。第1行列出了标记名,A列标识了每行的文档标题。 我在VBA方面相当缺乏经验,但这正是我迄今为止根据对类似问题的多个答案得出的结论。 我还没有完成“GetElementsByTagName”部分,因为该部分导致了问题。对于下一行,我得到错误“Object variable or With block variable not set”。

  • 我已经通过谷歌官方文档《开发者指南》API中提到的一个简单Java代码成功地在我的Google Drive帐户的现有电子表格中创建了一个新的工作表,但我想通过Java代码在我的Google Drive帐户中创建一个新的电子表格。在链接中,他们没有提到这方面的任何示例代码。我已经在Spreadservice类中看到了不同的可用方法。 如何使用Google电子表格API实现这一点?

  • 首先,让我说这个网站是天赐之物! 我有一系列每月B2:AS40的数据。月份在A2:AS2中,A2:A40中是姓名列表,所有这些都在“Sheet1”中 经过之前在这里的一些搜索,我想出了以下内容,脚本为每一行制作一个新图表,创建一个标题,并以6个月的间隔放入MajorGridline,但是没有绘制数据。我这辈子都不知道为什么!! 请帮帮忙 样本数据: 将脚本更改为以下内容后: 脚本不会在每次运行时都

  • 问题内容: 我想从表中的数据创建json。表看起来像这样: 我正在使用FOR JSON PATH,这很不错: 但此查询的返回值是一行中的三个串联的json: 我需要每一行都是一个单独的json,像这样: 我正在尝试使用拆分函数(CROSS APPLY),该函数需要使用分隔符作为参数,但这不是一个可靠的解决方案,因为json可以进一步扩展或分支,并且可以不分离整个json,而是分离json内部的js

  • 我希望能够从外部文件的值中筛选excel电子表格中的列值。 例如:列A列出了在计算机上运行的一堆程序。我在一个. txt或. csv文件中有一个“认可程序”的白名单。 如果单元格包含与. csv文件中的一个条目匹配的值,我想编写一个脚本,将从“列A”中删除条目。 例如:“A列”包含数百条从“Adobe”到“Xerox”的条目。我有我的“认可软件”清单,其中包括Adobe和Xerox。我希望Exce

  • 数据 第一页用于数据输入。每行代表一张服务票。每列将表示有关服务事件的数据,如序列号或型号。 期望的结果 对于包含特定字段(列a ~“票证号”)中数据的每一行,Excel将基于模板创建一个新的工作表(服务票证),并将相应行中的数据放入指定的单元格中。 提前感谢您提供的任何帮助。