我现在有一个.xslm的Excel文件,读取内容是用集成平台读好的,但是目前读到的是乱码,现在想实现把Excel文件转换成XML文件,为后续继续转换成EDI格式的文件做准备,想问一下Groovy或者js可以实现把读取的这部分数据转换成XML吗
1条回答 默认 最新
- 不会理财的程序员不是好摄影师 2023-03-22 14:11关注
以下是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文件中有多个工作表,需要对每个工作表进行遍历并合并数据。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 微信会员卡接入微信支付商户号收款
- ¥15 如何获取烟草零售终端数据
- ¥15 数学建模招标中位数问题
- ¥15 phython路径名过长报错 不知道什么问题
- ¥15 深度学习中模型转换该怎么实现
- ¥15 HLs设计手写数字识别程序编译通不过
- ¥15 Stata外部命令安装问题求帮助!
- ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
- ¥15 TYPCE母转母,插入认方向
- ¥15 如何用python向钉钉机器人发送可以放大的图片?