如何保存复用XML到Excel/Access的映射 按月提取XML固定数据
方案1:Excel VBA 复用XML映射规则(适配现有操作习惯)
你可以把已经配置好XML映射的Excel文件保存为模板,后续处理新XML时直接基于模板生成文件,或者通过VBA自动加载预设的映射规则、导入新XML数据,无需重复拖拽配置。
- 第一步:按你之前的操作流程,在空白Excel里配置好所有需要的XML字段映射,把这个文件另存为
XML映射模板.xlsm(启用宏的格式,可内置处理代码),这个文件里的映射规则会永久保留。 - 第二步:在模板文件里插入如下VBA代码,每次处理新XML时运行即可自动导入数据:
Sub 批量导入XML并映射() Dim xmlFile As Variant Dim xmlMap As XmlMap ' 获取已保存的映射规则(映射名称可在开发工具->XML源面板查看) Set xmlMap = ThisWorkbook.XmlMaps("你预设的映射名称") ' 选择要处理的XML文件,支持多选 xmlFile = Application.GetOpenFilename(FileFilter:="XML文件 (*.xml), *.xml", MultiSelect:=True) If IsArray(xmlFile) Then For i = LBound(xmlFile) To UBound(xmlFile) ' 导入XML数据到已有的映射规则 xmlMap.Import URL:=xmlFile(i), Overwrite:=False Next i End If ' 可自行追加代码把提取的字段自动写入Access End Sub
- 核心说明:只要不删除模板里的XmlMap对象,映射规则就可以永久复用,新增XML文件只需要运行代码即可完成提取。
方案2:VBA直接解析XML提取数据(灵活性最高,无需依赖Excel映射功能)
你可以直接通过VBA的DOM对象解析XML文件,硬编码固定字段的提取规则,完全跳过Excel的XML源面板配置,后续不管XML数量多少都可以批量处理。
示例代码框架:
Sub 直接解析XML提取数据() Dim xmlDoc As Object Dim node As Object Dim targetValue As String Dim xmlPath As String Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0") xmlDoc.async = False xmlDoc.validateOnParse = False ' 遍历你所有要处理的XML文件 xmlPath = "你的XML文件存放路径\xxx.xml" If xmlDoc.Load(xmlPath) Then ' 替换为你要提取的字段的XPath路径,固定之后无需修改 Set node = xmlDoc.SelectSingleNode("/*/一级节点/二级节点/你要提取的字段节点") If Not node Is Nothing Then targetValue = node.Text ' 这里可以直接写代码把targetValue存入Access,不用经过Excel中转 End If End If End Sub
- 优势:规则直接写在代码里,不存在映射丢失的问题,后续XML数量增长也可以批量遍历处理,还能跳过Excel直接写入Access,减少中间步骤。
方案3:Access直接导入XML(无Excel中转,效率最高)
你本身精通Access VBA,可以直接在Access里编写导入逻辑,无需经过Excel:
- Access本身支持
ImportXML方法,你可以预先设置好导入的转换规则,或者用DOM解析后直接写入表,逻辑和上面的Excel VBA解析逻辑一致。
示例代码:
Sub Access直接导入XML() Dim xmlPath As String xmlPath = "XML文件路径\test.xml" ' 直接导入到Access指定表,acAppendData参数可以追加数据不覆盖 Application.ImportXML DataSource:=xmlPath, ImportOptions:=acAppendData ' 如果需要过滤字段,也可以用DOM解析后用Insert语句写入表即可 End Sub
内容的提问来源于stack exchange,提问作者alfaista
相关产品推荐
相关产品推荐

