Groovy语言 Excel转XML代码实现方式

我现在有一个.xslm的Excel文件,读取内容是用集成平台读好的,但是目前读到的是乱码,现在想实现把Excel文件转换成XML文件,为后续继续转换成EDI格式的文件做准备,想问一下Groovy或者js可以实现把读取的这部分数据转换成XML吗

以下是Groovy语言Excel转XML的代码实现方式:


@Grab(group='org.apache.poi', module='poi', version='3.17') //导入Apache POI库
import org.apache.poi.hssf.usermodel.HSSFWorkbook //导入HSSFWorkbook类
import org.apache.poi.ss.usermodel.* //导入SS包中的所有类
import groovy.xml.* //导入Groovy XML类
def excelToXml(File excelFile) {
   FileInputStream inputStream = new FileInputStream(excelFile) //创建文件输入流
   Workbook workbook = new HSSFWorkbook(inputStream) //创建工作簿
   Sheet sheet = workbook.getSheetAt(0) //获取第一个工作表
   List<Map<String, String>> dataList = [] //创建List,用于存储Excel数据
   //遍历每一行数据
   sheet.forEach { row ->
      if (row.getRowNum() > 0) { //跳过第一行表头
         Map<String, String> dataMap = [:] //创建Map,用于存储每行数据
         row.forEach { cell ->
            int colIndex = cell.getColumnIndex() //获取当前单元格所在列
            String colName = sheet.getRow(0).getCell(colIndex).getStringCellValue() //获取当前单元格所在列的名称
            String cellValue = cell.getStringCellValue() //获取单元格的值
            dataMap.put(colName, cellValue) //将列名和值存入Map
         }
         dataList.add(dataMap) //将Map存入List
      }
   }
   def xmlBuilder = new StreamingMarkupBuilder() //创建XMLBuilder
   def rootNodeName = excelFile.getName().substring(0, excelFile.getName().indexOf('.')) //获取Excel文件名作为根节点名
   def xml = xmlBuilder.bind {
      "$rootNodeName" {
         dataList.each { dataMap ->
            "row" {
               dataMap.each { key, value ->
                  "$key"(value) //将Map中的键值对作为XML节点和值
               }
            }
         }
      }
   }
   return XmlUtil.serialize(xml) //将XML输出为字符串
}

使用方式:

File excelFile = new File('data.xlsx') //创建Excel文件对象
def xmlString = excelToXml(excelFile) //调用excelToXml方法将Excel转为XML
println xmlString //输出XML字符串

注意,此代码仅适用于Excel文件中只有一个工作表的情况。如果Excel文件中有多个工作表,需要对每个工作表进行遍历并合并数据。