You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DataWeave转换Excel文件 批量填充Country列为test值

Mule 4.4.0 EE 批量修改Excel Country列值实现方案

从你提供的工作表XML结构来看,不需要引入第三方依赖,直接用Mule自带的XML模块和DataWeave即可完成需求,具体实现如下:

核心逻辑说明

  • 从表头行(r="1"的行)可确认,Country列对应列标识为H,所有行中r属性以H开头的<c>单元格节点就是需要修改的目标节点
  • 工作表根节点带默认命名空间http://schemas.openxmlformats.org/spreadsheetml/2006/main,脚本中必须提前声明该命名空间,否则会出现节点匹配失败的问题
  • 你提供的文件中所有单元格都是inlineStr内联字符串类型,不需要处理共享字符串表,直接替换单元格内<t>标签的文本内容即可,不会破坏原有格式

核心实现代码

假设你已经通过解压xlsx压缩包拿到了目标工作表的XML内容,并存放在变量worksheetXml中,替换逻辑的DataWeave脚本如下:

%dw 2.0
output application/xml writeDeclaration=true
// 声明Excel工作表默认命名空间
ns ss http://schemas.openxmlformats.org/spreadsheetml/2006/main
---
worksheetXml mapObject (rootNode, rootKey) -> {
    (rootKey): rootNode mapObject (node, nodeKey) -> {
        (nodeKey): if (nodeKey as String == "ss#sheetData") do {
            // 遍历sheetData下的所有行
            node mapObject (row, rowKey) -> {
                (rowKey): row mapObject (cell, cellKey) -> {
                    (cellKey): if (
                        cellKey as String == "ss#c" 
                        and startsWith(cell.@"r", "H")
                    ) do {
                        // 匹配H列单元格,替换文本内容为test
                        cell update {
                            case ."ss#is"."ss#t" -> "test"
                        }
                    } else {
                        cell
                    }
                }
            }
        } else {
            node
        }
    }
}

适配优化建议

  • 如果你的表格后续可能调整列顺序,不要硬编码列号H,可以先遍历第一行的单元格,动态查找文本值为Country的单元格对应的列标识,再用动态标识匹配数据行单元格,避免列顺序变动后逻辑失效
  • 修改完XML内容后,将新的XML内容写回xlsx压缩包对应的工作表路径,覆盖原有文件即可,注意不要修改压缩包内其他文件的结构和顺序,否则会导致Excel文件损坏
  • 小数据量场景也可以直接使用Mule Excel连接器读取为结构化数据,遍历每一行将Country字段设为test后重新写出,代码会更简洁,但数据量超过1万行时直接处理XML的性能会明显优于连接器

内容的提问来源于stack exchange,提问作者Willy Kelly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 00:04:10