java实现 xls转xlsx
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、使用步骤
- 1.引入依赖
- 2.转换操作
前言
使用spark读取excel往数据库进行导数(现有插件spark-excel_2.12只支持读取xlsx),又因为数据源中存在大量xls类型的文件,需要开发一个功能将xls文件转为xlsx,来进行导数
一、使用步骤
1.引入依赖
代码如下(示例):
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>
2.转换操作
代码如下(示例):
/*** xls 文件转换为xlsx文件*/public static String xls2xlsx(File sourceFile) throws IOException {//创建hssworkbook 操作xls 文件POIFSFileSystem fs = new POIFSFileSystem(new File(sourceFile.getPath()));HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fs);//创建xssfworkbook 操作xlsx 文件XSSFWorkbook workbook = new XSSFWorkbook();int sheetNum = hssfWorkbook.getNumberOfSheets();String xlsxPath = createNewXlsxFilePath(sourceFile);for (int sheetIndex = 0; sheetIndex < sheetNum; sheetIndex++) {HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(sheetIndex);if (workbook.getSheet(hssfSheet.getSheetName()) == null) {XSSFSheet xssfSheet = workbook.createSheet(hssfSheet.getSheetName());copySheets(hssfSheet, xssfSheet);} else {copySheets(hssfSheet, workbook.createSheet(hssfSheet.getSheetName()));}FileOutputStream fileOut = new FileOutputStream(xlsxPath);//将复制的xls数据写入到新的xlsx文件中workbook.write(fileOut);workbook.close();hssfWorkbook.close();//删除原有的xls文件 直接删除有点暴力 可以考虑在另外的目录下保存一下sourceFile.delete();}return xlsxPath;}//为xlsx创建路径public static String createNewXlsxFilePath(File sourceFile){String oldPath = sourceFile.getPath();String newPath = oldPath.substring(0,oldPath.indexOf("."))+".xlsx";return newPath;}/*** 转换为xlsx --创建sheet* @param source* @param destination*/public static void copySheets(HSSFSheet source, XSSFSheet destination) {int maxColumnNum = 0;for (int i = source.getFirstRowNum(); i <= source.getLastRowNum(); i++) {HSSFRow srcRow = source.getRow(i);XSSFRow destRow = destination.createRow(i);if (srcRow != null) {// 拷贝行copyRow(srcRow, destRow);if (srcRow.getLastCellNum() > maxColumnNum) {maxColumnNum = srcRow.getLastCellNum();}}}for (int i = 0; i <= maxColumnNum; i++) {destination.setColumnWidth(i, source.getColumnWidth(i));}}/*** 转换xlsx -- 复制行* @param srcRow* @param destRow*/public static void copyRow( HSSFRow srcRow, XSSFRow destRow) {// 拷贝行高destRow.setHeight(srcRow.getHeight());for (int j = srcRow.getFirstCellNum(); j <= srcRow.getLastCellNum(); j++) {HSSFCell oldCell = srcRow.getCell(j);XSSFCell newCell = destRow.getCell(j);if (oldCell != null) {if (newCell == null) {newCell = destRow.createCell(j);}// 拷贝单元格copyCell(oldCell, newCell);}}}/*** 转换xlsx -- 复制单元格* @param oldCell* @param newCell*/public static void copyCell(HSSFCell oldCell, XSSFCell newCell) {switch (oldCell.getCellType()) {case STRING:newCell.setCellValue(oldCell.getStringCellValue());break;case NUMERIC:newCell.setCellValue(oldCell.getNumericCellValue());break;case BLANK:newCell.setCellType(CellType.BLANK);break;case BOOLEAN:newCell.setCellValue(oldCell.getBooleanCellValue());break;case ERROR:newCell.setCellErrorValue(oldCell.getErrorCellValue());break;case FORMULA:newCell.setCellFormula(oldCell.getCellFormula());break;default:break;}}
注:如果需要考虑合并单元格,存在图片,复制表格样式等功能请参考
https://blog.csdn.net/sjyshine/article/details/121956034
java实现 xls转xlsx相关推荐
- Java实现XLS和XLSX之间的相互转换
文章目录 前言 一.程序环境 二.格式转换 1.将XLS转换为XLSX 代码示例 效果图 2.将XLSX转换为XLS 代码示例 效果图 前言 当你在较新版本的Microsoft Excel中打开一个X ...
- java excel api xlsx_Java 解析Excel(xls、xlsx两种格式)
Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...
- Java解析Excel工具类(兼容xls和xlsx)
依赖jar <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml< ...
- java 兼容excel_Java解析Excel工具类(兼容xls和xlsx)
依赖jar org.apache.poi poi-ooxml 4.0.1 ExcelUtils.java package javax.utils; import java.io.File; impor ...
- Java 解析Excel(xls、xlsx两种格式)
Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...
- java使用poi读取存储excel表格,包括xls和xlsx格式
全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用poi读取存储excel表格,包括xls和xlsx格式. 需要导入的包 poi-3.14.jar poi-ooxml-3.14.jar ...
- java读取Excel里面的内容包括(xls和xlsx)后缀文件
java通过POI架包(HSSFWorkbook和XSSFWorkbook)读取Excel里面的内容包括(xls和xlsx)后缀文件 在我们平时的开发的过程,难免会遇到需要读取Excel文件,Exce ...
- java使用poi实现excel保护工作表实例代码(支持.xls和.xlsx)
java使用poi实现excel保护工作表,支持.xls和.xlsx类型的excel,代码如下: import java.io.FileInputStream; import java.io.File ...
- java 使用 jacob 实现 将 freemarker 导出的 XML 格式的 excel 转 xls、xlsx 格式
最近项目上有一个导出复杂excel的需求,发现无论是使用 poi 还是使用阿里巴巴的 easyexcel ,实际上都是编程式的方式,实现起来代码比较复杂而且不便于维护,于是决定采用 freemarke ...
最新文章
- Valgrind使用【转】
- mysql5.7.13.zip安装(windows)
- reactor官方文档译文(1)Reactor简介
- leetcode396. Rotate Function
- android - 常用知识点以及代码片段(不断更新)
- php正则表达式程序,php正则表达式 Web程序 - 贪吃蛇学院-专业IT技术平台
- 《C++ Primer》14.1节练习
- linux创建指定大小的文件
- SQL用了两年多,分享2个最常用的小技巧
- SpringBoot学习(一)初识SpringBoot、第一个SpringBoot程序
- Java调用C/C++的过程
- 怎么打开和修改dll文件的?如何调用和编辑?
- 安装Oracle XE 18c
- 什么是深度学习,深度学习和机器学习有什么关系?
- 自控力读书笔记 第七章	 出售未来:及时享乐的经济学
- Matlab基础学习(中)
- 【北大青鸟天府校区的Java专业怎么样?】
- OpenGL ES 2.0 for Android教程(六):进入第三维
- AnyConnect 安卓系统的使用教程
- video标签的属性和事件用法大全
热门文章
- Python-IO编程和异常
- android陀螺仪手机垂直角度,Android设备中实现陀螺仪(Orientation Sensor)
- 【基础算法Ⅰ】算法入门篇
- 联想服务器怎么使用uefi启动不了系统,联想小新如何用uefi启动在win10下装win7系统...
- antv x6踩坑记录二
- 2022-06-18 jQuery遍历方法:$.each()方法遍历对象或数组的示例
- SAP ABAP GUI_DOWNLOAD中下载乱码的问题
- Linux系统中systemctl命令的使用
- pairs和iparis
- linux xxd命令