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

如何编写Groovy脚本将XML数据写入Excel(xls)?

如何用Groovy将指定XML数据写入Excel(xls)文件?

用户提供的XML结构如下:

<Record>
  <Action>create</Action>
  <ID KEMASAN>DUS, 1 BOTOL PLASTIK @ 28 TABLET</ID KEMASAN>
  <Barcode>(01)00372626270113(21)200000022671(17)(10)ICS_DECOM</Barcode>
  <Barcode>(01)00372626270113(21)200000022670(17)(10)ICS_DECOM</Barcode>
  <Barcode>(01)00372626270113(21)200000000052(17)(10)ICS_DECOM</Barcode>
  <NIE>DKI1844200317A1</NIE>
  <LOT NO>ICS_DECOM</LOT NO>
  <Exp Date>31/12/2024</Exp Date>
  <Batch No>ICS_DECOM</Batch No>
  <GTIN>00372626270113</GTIN>
  <IS_ACTIVE>TRUE</IS_ACTIVE>
  <IS_SAMPLE>FALSE</IS_SAMPLE>
  <IS_REJECT>FALSE</IS_REJECT>
  <MFG DATE>01/01/2023</MFG DATE>
  <Case SGTIN>urn:epc:id:sgtin:0372626.527011.200000000052</Case SGTIN>
  <Pallet SGTIN>urn:epc:id:sscc:0361958.0001046962</Pallet SGTIN>
</Record>

解决方案

1. 依赖准备

Groovy操作Excel依赖Apache POI库,脚本可通过@Grab注解自动拉取依赖,无需手动下载。

2. 完整Groovy脚本

@Grab('org.apache.poi:poi:4.1.2')
@Grab('org.apache.poi:poi-ooxml:4.1.2')
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.ss.usermodel.*
import groovy.xml.XmlSlurper

// 1. 解析XML数据
def xmlContent = """
<Record>
  <Action>create</Action>
  <ID KEMASAN>DUS, 1 BOTOL PLASTIK @ 28 TABLET</ID KEMASAN>
  <Barcode>(01)00372626270113(21)200000022671(17)(10)ICS_DECOM</Barcode>
  <Barcode>(01)00372626270113(21)200000022670(17)(10)ICS_DECOM</Barcode>
  <Barcode>(01)00372626270113(21)200000000052(17)(10)ICS_DECOM</Barcode>
  <NIE>DKI1844200317A1</NIE>
  <LOT NO>ICS_DECOM</LOT NO>
  <Exp Date>31/12/2024</Exp Date>
  <Batch No>ICS_DECOM</Batch No>
  <GTIN>00372626270113</GTIN>
  <IS_ACTIVE>TRUE</IS_ACTIVE>
  <IS_SAMPLE>FALSE</IS_SAMPLE>
  <IS_REJECT>FALSE</IS_REJECT>
  <MFG DATE>01/01/2023</MFG DATE>
  <Case SGTIN>urn:epc:id:sgtin:0372626.527011.200000000052</Case SGTIN>
  <Pallet SGTIN>urn:epc:id:sscc:0361958.0001046962</Pallet SGTIN>
</Record>
"""

def record = new XmlSlurper().parseText(xmlContent)

// 2. 创建Excel工作簿和工作表
Workbook workbook = new HSSFWorkbook() // HSSF对应xls格式,若需xlsx可替换为XSSFWorkbook
Sheet sheet = workbook.createSheet("Record Data")

// 3. 定义表头与数据映射
def fieldMappings = [
    "Action": record.Action.text(),
    "ID KEMASAN": record.'ID KEMASAN'.text(),
    "Barcodes": record.Barcode*.text().join("\n"), // 多个Barcode用换行拼接
    "NIE": record.NIE.text(),
    "LOT NO": record.'LOT NO'.text(),
    "Exp Date": record.'Exp Date'.text(),
    "Batch No": record.'Batch No'.text(),
    "GTIN": record.GTIN.text(),
    "IS_ACTIVE": record.IS_ACTIVE.text(),
    "IS_SAMPLE": record.IS_SAMPLE.text(),
    "IS_REJECT": record.IS_REJECT.text(),
    "MFG DATE": record.'MFG DATE'.text(),
    "Case SGTIN": record.'Case SGTIN'.text(),
    "Pallet SGTIN": record.'Pallet SGTIN'.text()
]

// 4. 写入表头
Row headerRow = sheet.createRow(0)
int cellIndex = 0
fieldMappings.keySet().each { header ->
    Cell cell = headerRow.createCell(cellIndex++)
    cell.setCellValue(header)
    // 表头加粗样式(可选)
    CellStyle style = workbook.createCellStyle()
    Font font = workbook.createFont()
    font.setBold(true)
    style.setFont(font)
    cell.setCellStyle(style)
}

// 5. 写入数据行
Row dataRow = sheet.createRow(1)
cellIndex = 0
fieldMappings.values().each { value ->
    Cell cell = dataRow.createCell(cellIndex++)
    cell.setCellValue(value ?: "")
}

// 6. 自动调整列宽(可选)
(0..<fieldMappings.size()).each { sheet.autoSizeColumn(it) }

// 7. 保存Excel文件
FileOutputStream outputStream = new FileOutputStream("record_data.xls")
workbook.write(outputStream)
outputStream.close()
workbook.close()

println "Excel文件已成功生成:record_data.xls"

脚本说明

  • XML解析:用Groovy内置的XmlSlurper快速解析XML,带空格的标签需用.'标签名'语法访问。
  • Excel格式:使用HSSFWorkbook生成xls格式文件,若需要xlsx格式,可替换为XSSFWorkbook并修改输出文件后缀为.xlsx。
  • 多值处理:多个<Barcode>标签内容用换行符拼接,方便在Excel单元格内查看完整数据。
  • 样式优化:可选为表头添加加粗样式,提升表格可读性。
  • 文件保存:最终生成名为record_data.xls的文件,可根据需求修改输出路径和文件名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:43:13