我现在有一个.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文件中有多个工作表,需要对每个工作表进行遍历并合并数据。