提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、使用步骤
    • 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相关推荐

  1. Java实现XLS和XLSX之间的相互转换

    文章目录 前言 一.程序环境 二.格式转换 1.将XLS转换为XLSX 代码示例 效果图 2.将XLSX转换为XLS 代码示例 效果图 前言 当你在较新版本的Microsoft Excel中打开一个X ...

  2. 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 ...

  3. Java解析Excel工具类(兼容xls和xlsx)

    依赖jar <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml< ...

  4. 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 ...

  5. Java 解析Excel(xls、xlsx两种格式)

    Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...

  6. java使用poi读取存储excel表格,包括xls和xlsx格式

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用poi读取存储excel表格,包括xls和xlsx格式. 需要导入的包 poi-3.14.jar poi-ooxml-3.14.jar ...

  7. java读取Excel里面的内容包括(xls和xlsx)后缀文件

    java通过POI架包(HSSFWorkbook和XSSFWorkbook)读取Excel里面的内容包括(xls和xlsx)后缀文件 在我们平时的开发的过程,难免会遇到需要读取Excel文件,Exce ...

  8. java使用poi实现excel保护工作表实例代码(支持.xls和.xlsx)

    java使用poi实现excel保护工作表,支持.xls和.xlsx类型的excel,代码如下: import java.io.FileInputStream; import java.io.File ...

  9. java 使用 jacob 实现 将 freemarker 导出的 XML 格式的 excel 转 xls、xlsx 格式

    最近项目上有一个导出复杂excel的需求,发现无论是使用 poi 还是使用阿里巴巴的 easyexcel ,实际上都是编程式的方式,实现起来代码比较复杂而且不便于维护,于是决定采用 freemarke ...

最新文章

  1. Valgrind使用【转】
  2. mysql5.7.13.zip安装(windows)
  3. reactor官方文档译文(1)Reactor简介
  4. leetcode396. Rotate Function
  5. android - 常用知识点以及代码片段(不断更新)
  6. php正则表达式程序,php正则表达式 Web程序 - 贪吃蛇学院-专业IT技术平台
  7. 《C++ Primer》14.1节练习
  8. linux创建指定大小的文件
  9. SQL用了两年多,分享2个最常用的小技巧
  10. SpringBoot学习(一)初识SpringBoot、第一个SpringBoot程序
  11. Java调用C/C++的过程
  12. 怎么打开和修改dll文件的?如何调用和编辑?
  13. 安装Oracle XE 18c
  14. 什么是深度学习,深度学习和机器学习有什么关系?
  15. 自控力读书笔记 第七章 出售未来:及时享乐的经济学
  16. Matlab基础学习(中)
  17. 【北大青鸟天府校区的Java专业怎么样?】
  18. OpenGL ES 2.0 for Android教程(六):进入第三维
  19. AnyConnect 安卓系统的使用教程
  20. video标签的属性和事件用法大全

热门文章

  1. Python-IO编程和异常
  2. android陀螺仪手机垂直角度,Android设备中实现陀螺仪(Orientation Sensor)
  3. 【基础算法Ⅰ】算法入门篇
  4. 联想服务器怎么使用uefi启动不了系统,联想小新如何用uefi启动在win10下装win7系统...
  5. antv x6踩坑记录二
  6. 2022-06-18 jQuery遍历方法:$.each()方法遍历对象或数组的示例
  7. SAP ABAP GUI_DOWNLOAD中下载乱码的问题
  8. Linux系统中systemctl命令的使用
  9. pairs和iparis
  10. linux xxd命令