如何使用VBA将多个XML文件导入Excel,而不覆盖已导入的文件
我有一个包含多个XML文件的目录。每天都会向目录中添加新的XML文件 我每天都试图将这些XML文件导入到一个特定的Excel工作表中,而不会覆盖Excel工作表中的现有数据 我已经设法导入了XML文件如何使用VBA将多个XML文件导入Excel,而不覆盖已导入的文件,excel,xml,vba,xml-import,Excel,Xml,Vba,Xml Import,我有一个包含多个XML文件的目录。每天都会向目录中添加新的XML文件 我每天都试图将这些XML文件导入到一个特定的Excel工作表中,而不会覆盖Excel工作表中的现有数据 我已经设法导入了XML文件 问题1:如何导入没有标题或XML路径的XML文件 问题2:有没有办法只导入新数据而跳过我已经导入的文件 希望有人能帮我解决这个问题。我花了很长时间试图找到解决方案,但自己或在线都找不到答案。 这是我的XML文件的结构: <?xml version="1.0" encoding="utf-
- 问题1:如何导入没有标题或XML路径的XML文件
- 问题2:有没有办法只导入新数据而跳过我已经导入的文件
<?xml version="1.0" encoding="utf-8"?>
<MFK_XML xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Auftrag>
<WarenkorbReferenz>0</WarenkorbReferenz>
<JobNr>12345-999</JobNr>
<KuNr>12345</KuNr>
<ReNr>7</ReNr>
<SoA>0</SoA>
<Termin>2020-03-10</Termin>
<Versandtermin>2020-03-09</Versandtermin>
<Gewicht>1.1037620</Gewicht>
<Datencheck>0</Datencheck>
<Proof>0</Proof>
<Kundenhinweis />
<Auflage>5</Auflage>
<Versionen>1</Versionen>
<Gesamtpreis>15.50</Gesamtpreis>
<Priority>S</Priority>
<ProduktionsTage>5</ProduktionsTage>
<Mandant />
<LNr>151</LNr>
<IVB>10</IVB>
<Gratis>0</Gratis>
<Transfer>2020-03-02</Transfer>
</Auftrag>
<Artikel>
<Artikelbezeichnung>Broschüre mit Metall-Spiralbindung, Endformat DIN A4, 48-seitig</Artikelbezeichnung>
<ArtikelID>12345</ArtikelID>
<ArtStr>Flex</ArtStr>
<ProdKrzl>FlX</ProdKrzl>
<Sorte>135g Innenteil mit 250g Umschlag (matt, hochwertiger Qualitätsdruck, 4/4-farbig)</Sorte>
<SortenID>152</SortenID>
<Seitenzahl>48</Seitenzahl>
<SeitenZahlMalVersionen>48</SeitenZahlMalVersionen>
<Seitenzahlgesamt>48</Seitenzahlgesamt>
<SeitenzahlInhalt />
<SeitenzahlUmschlag />
<Farbigkeit>44</Farbigkeit>
<FarbigkeitInhalt />
<FarbigkeitUmschlag />
<PapierInnen>135g Innenteil</PapierInnen>
<PapierUmschlag>250g Umschlag (matt, hochwertiger Qualitätsdruck, 4/4-farbig)</PapierUmschlag>
<Endformat_mm_X>210</Endformat_mm_X>
<Endformat_mm_Y>297</Endformat_mm_Y>
<Datenformat_mm_X>216</Datenformat_mm_X>
<Datenformat_mm_y>303</Datenformat_mm_y>
<FormatUmschlag_x />
<FormatUmschlag_y />
<EndFormatUmschlag_x />
<EndFormatUmschlag_y />
<Falzart>0</Falzart>
<Falzlauf />
<gefendFormat_x />
<gefendFormat_y />
<BeschnittI>3</BeschnittI>
<BeschnittU />
<Bundstaerke>3</Bundstaerke>
<vWd>0</vWd>
<pWd>0</pWd>
<vUV>0</vUV>
<pUV>0</pUV>
<Rillung>0</Rillung>
<KissCut>0</KissCut>
<Druckverfahren>Druck</Druckverfahren>
<dataformat>pdf</dataformat>
<Zusatzinfo>Schwarz</Zusatzinfo>
</Artikel>
<Optionen>
<Veredelung>0</Veredelung>
<Falzung>0</Falzung>
<Ausrichtung>0</Ausrichtung>
<Heften>0</Heften>
<Nutung>0</Nutung>
<Buendelung>0</Buendelung>
<Leimung>0</Leimung>
<Perforierung>0</Perforierung>
<Sonderfarbe>0</Sonderfarbe>
<Lochbohrungen_Ecken>0</Lochbohrungen_Ecken>
<Nummerierung>0</Nummerierung>
<Barcode>0</Barcode>
<Hologramm>0</Hologramm>
<Abheftvorrichtung>0</Abheftvorrichtung>
<Cello>
<Cellophaniert>0</Cellophaniert>
<CelloArt>0</CelloArt>
</Cello>
<stanze>
<StanzeForm>keine</StanzeForm>
<StanzeOffset>0</StanzeOffset>
</stanze>
<Einschweissen>0</Einschweissen>
<Fadenheftung>0</Fadenheftung>
<Werbefolie>0</Werbefolie>
<Ecken_abrunden>0</Ecken_abrunden>
<RAL_Farbe>0</RAL_Farbe>
<Gummiband_Verschluss>0</Gummiband_Verschluss>
<HKS_Pantone>0</HKS_Pantone>
<Lochung>0</Lochung>
<PP_Deck>0</PP_Deck>
<DeckBl_V>0</DeckBl_V>
<DeckBl_V_H>0</DeckBl_V_H>
<Praegung>0</Praegung>
<Rubbelfeld>0</Rubbelfeld>
<Magnetstreifen>0</Magnetstreifen>
<Unterschriftsfeld>0</Unterschriftsfeld>
<Magnetpunkt_Verschluss>0</Magnetpunkt_Verschluss>
<Griffloch>0</Griffloch>
<Verchromte_Buchecken>0</Verchromte_Buchecken>
<Rueckentasche>0</Rueckentasche>
<Visitenkartentasche>0</Visitenkartentasche>
<Dreieckstasche>0</Dreieckstasche>
<Kombitasche>0</Kombitasche>
<CD_Tasche>0</CD_Tasche>
<Radooesen>0</Radooesen>
<Postkarten_indiv_personalisieren>0</Postkarten_indiv_personalisieren>
<LED_Halogenbeleuchtung>0</LED_Halogenbeleuchtung>
<Klima>1</Klima>
</Optionen>
<Zusatzkosten />
<Dateien>
<Dateiname>12345-999.pdf</Dateiname>
</Dateien>
<WF_Name>
<WF_Name>12345-999.pdf</WF_Name>
</WF_Name>
</MFK_XML>
0
12345-999
12345
7.
0
2020-03-10
2020-03-09
1.1037620
0
0
5.
1.
15.50
s
5.
151
10
0
2020-03-02
Broschüre mit Metall Spirlabindung,最终格式DIN A4,48 seitig
12345
弯曲
FlX
135克麻省理工学院Innentel 250克Umschlag(马特,霍奇沃泰格Qualitätsdruck,4/4-farbig)
152
48
48
48
44
135g因恩泰尔酒店
250克乌姆施拉格(马特,霍奇沃泰格,4/4-farbig)
210
297
216
303
0
3.
3.
0
0
0
0
0
0
德鲁克
pdf
施瓦兹
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
基恩
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1.
12345-999.pdf
12345-999.pdf
以下是VBA的代码:
Sub-From_XML_To_XL()
Dim xWb作为工作簿
Dim xSWb作为工作簿
作为字符串的Dim xStrPath
将xFileDialog设置为文件对话框
将xFile设置为字符串
暗X等于长
关于错误转到错误处理程序
设置xFileDialog=Application.FileDialog(msoFileDialogFolderPicker)
xFileDialog.AllowMultiSelect=False
xFileDialog.Title=“选择一个文件夹”
如果xFileDialog.Show=-1,则
xStrPath=xFileDialog.SelectedItems(1)
如果结束
如果xStrPath=“”,则退出Sub
Application.ScreenUpdating=False
设置xSWb=thiswoolk
xCount=1
xFile=Dir(xStrPath&“\*.xml”)
当xFile“”时执行此操作
设置xWb=Workbooks.OpenXML(xStrPath&“\”&xFile)
xWb.Sheets(1).UsedRange.Copy xSWb.Sheets(1).Cells(xCount,1)
xWb.关闭错误
xCount=xSWb.Sheets(1).UsedRange.Rows.Count+2
xFile=Dir()
环
Application.ScreenUpdating=True
xSWb.Save
出口接头
错误处理程序:
MsgBox“无xml文件”
端接头
考虑转换XML文件的专用语言,您可以使用其document()
函数组合目录中的所有XML。然后,将转换后的文件作为one文档导入Excel。Office VBA可以使用该库运行XSLT 1.0
下面假设所有XML文件(不管重复出现的元素)中都保留了精确的结构,其中每个文档都映射到根级别
。为每个文档添加以下
行。如果您有数百个,考虑用VBA、Python等在一个循环中构建XSLT文档。如果文件相对张贴较小,XSLT是可行的解决方案,但确实存在内存限制。
XSLT(另存为.xsl,一个特殊的.xml文件)
考虑转换XML文件的专用语言,您可以使用它的document()
函数组合目录中的所有XML。然后,将转换后的文件作为one文档导入Excel。Office VBA可以使用该库运行XSLT 1.0
下面假设所有XML文件(不管重复出现的元素)中都保留了精确的结构,其中每个文档都映射到根级别
。为每个文档添加以下
行。如果您有数百个,考虑用VBA、Python等在一个循环中构建XSLT文档。如果文件相对张贴较小,XSLT是可行的解决方案,但确实存在内存限制。
XSLT(另存为.xsl,一个特殊的.xml文件)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/MFK_XML">
<MFK_XML>
<xsl:copy-of select="document('First.xml')/MFK_XML/*" />
<xsl:copy-of select="document('Second.xml')/MFK_XML/*" />
<xsl:copy-of select="document('Third.xml')/MFK_XML/*" />
<!-- ADD: <xsl:copy-of select="document('XXXX.xml')/MFK_XML/*" /> -->
</MFK_XML>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>