java 实现 xls转换为xlsx 适配所有格式

引入依赖

   <dependencies>
      <dependency>
			<groupId>e-iceblue</groupId>
			<artifactId>spire.xls</artifactId>
			<version>14.4.4</version>
		</dependency>
    </dependencies>
	<repositories>
		<repository>
			<id>com.e-iceblue</id>
			<name>e-iceblue</name>
			<url> https://repo.e-iceblue.cn/repository/maven-public /</url>
		</repository>
	</repositories>

完整代码

package com.common.utils;

import com.spire.xls.ExcelVersion;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.DateUtil;
import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;

import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;

import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
public class ExcelUtils2 {

    /**
     *
     * @param request
     * @param inputStream xls 流
     * @param fileName 文件名
     * @return
     */
    public static Map<String,Object> conver(HttpServletRequest request,InputStream inputStream,String fileName){

        Map<String,Object> res = new HashMap<>();

        //初始化一个Workbook类的实例
        Workbook workbook = new Workbook();

        try {
            String filePathXLS = createFile(request, fileName);
            //XLS写到临时目录
            writeToLocal(filePathXLS,inputStream);
            //加载XLS文件
            workbook.loadFromFile(filePathXLS);
            //将XLS文件保存为XLSX格式
            String filePathXLSX = filePathXLS+"x";
            //输 XLSX 出到filePathXLSX目录
            workbook.saveToFile(filePathXLSX, ExcelVersion.Version2016);
            //读取XLSX
            File fileXLSX = new File(filePathXLSX);
            if (fileXLSX.exists()){
                //2:实例化InputStream类对象

                FileInputStream fis = new FileInputStream(fileXLSX);
                XSSFWorkbook  xssfWorkbook = new XSSFWorkbook(fis);
                //删除指定sheet
                xssfWorkbook.removeSheetAt(xssfWorkbook.getSheetIndex("Evaluation Warning"));
                //HSSFWorkbook wb = new HSSFWorkbook(); // create the new Workbook
                //HSSFSheet sheet = xssfWorkbook.createSheet(); // create
                //生成Excel代码略
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                xssfWorkbook.write(bos);
                    byte[] brray = bos.toByteArray();
                InputStream input = new ByteArrayInputStream(brray);

                //FileUtils.forceDelete(fileXLSX);
                FileUtils.forceDelete(new File(filePathXLS));
                //return input;
                res.put("stream",input);
                //后续需关闭此流
                res.put("del",fileXLSX);
                fis.close();

            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return res;
    }

    /**
     * 创建临时文件
     * @param request
     * @param fileName
     * @return
     * @throws IOException
     */
    public static String createFile(HttpServletRequest request,String fileName) throws IOException {
        String contextPath = request.getContextPath(); // /JQ_Resource
        String absolutePath = System.getProperty("user.dir");
        fileName = DateUtils.format(new Date(),DateUtils.YYYYMMDDHHMMSS)+"_"+fileName;
        String filePath = absolutePath + "/temp/"+fileName;
        String dirPath = absolutePath + "/temp/";

        File file = new File(filePath);
        File dir = new File(dirPath);

        if (dir.isDirectory()) {
            // 清除该目录下的文件及子目录文件而不删除该目录文件夹。该目录不存在会报错
            //FileUtils.cleanDirectory(dir);
        } else {
            dir.mkdirs();
        }

        if (file.exists()) {
            // 删除指定文件,不存在报异常
            //FileUtils.forceDelete(file);
        }else {
            file.createNewFile();
        }
        return filePath;
    }
    /**
     * 将InputStream写入本地文件
     * @param destination 写入本地目录
     * @param input	输入流
     * @throws IOException
     */
    private static void writeToLocal(String destination, InputStream input)
            throws IOException {
        int index;
        byte[] bytes = new byte[1024];
        FileOutputStream downloadFile = new FileOutputStream(destination);
        while ((index = input.read(bytes)) != -1) {
            downloadFile.write(bytes, 0, index);
            downloadFile.flush();
        }
        downloadFile.close();
        input.close();
    }
}

Java中可以使用Apache POI库来将xls文件转换成xlsx文件。首先,需要导入Apache POI库的相关jar包,然后编写Java代码来实现转换功能。首先需要创建一个HSSFWorkbook对象来读取xls文件中的数据,然后再创建一个XSSFWorkbook对象来写入xlsx文件中的数据。接着,将xls文件中的数据逐行读取出来,然后逐行写入到xlsx文件中。最后,将生成的xlsx文件保存到指定的路径下即可完成转换。 示例代码如下: ```java // 导入相关包 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class XlsToXlsxConverter { public static void main(String[] args) { String xlsFilePath = "path/to/your/xls/file.xls"; String xlsxFilePath = "path/to/your/xlsx/file.xlsx"; try { // 读取xls文件 FileInputStream xlsFile = new FileInputStream(xlsFilePath); HSSFWorkbook workbook = new HSSFWorkbook(xlsFile); // 创建新的xlsx文件 XSSFWorkbook convertedWorkbook = new XSSFWorkbook(); // 逐行复制数据 for (int i = 0; i < workbook.getNumberOfSheets(); i++) { convertedWorkbook.createSheet(workbook.getSheetName(i)); convertedWorkbook.setSheetName(i, workbook.getSheetName(i)); for (int j = 0; j < workbook.getSheetAt(i).getPhysicalNumberOfRows(); j++) { convertedWorkbook.getSheetAt(i).createRow(j); for (int k = 0; k < workbook.getSheetAt(i).getRow(j).getPhysicalNumberOfCells(); k++) { if (workbook.getSheetAt(i).getRow(j).getCell(k) != null) convertedWorkbook.getSheetAt(i).getRow(j).createCell(k).setCellValue(workbook.getSheetAt(i).getRow(j).getCell(k).toString()); } } } // 保存xlsx文件 FileOutputStream xlsxFile = new FileOutputStream(xlsxFilePath); convertedWorkbook.write(xlsxFile); // 关闭流 xlsFile.close(); xlsxFile.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上就是使用Javaxls文件转换成xlsx文件的基本方法。使用Apache POI库可以很方便地实现这个功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值