如何编写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
相关产品推荐
相关产品推荐

