将 .xls 文件转换为 .xlsx 文件

Converting .xls file to .xlsx file

提问人:justcurious 提问时间:10/25/2023 最后编辑:justcurious 更新时间:10/26/2023 访问量:75

问:

我有一个 .xls 格式的 Excel 文件,我想将其转换为或另存为具有相同内容的 .xlsx 文件。

我尝试了以下方法

package Test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class xlstoxlsx {
    
    public static void convert(String xlsFilePath, String xlsxFilePath) throws IOException {
    
    FileInputStream xlsFile = new FileInputStream(xlsFilePath);
    HSSFWorkbook xlswb = new HSSFWorkbook(xlsFile);

    XSSFWorkbook xlsxwb = new XSSFWorkbook();

    for (int i = 0; i < xlswb.getNumberOfSheets(); i++) {
        xlsxwb.createSheet(xlswb.getSheetName(i));
    }
       
    FileOutputStream xlsxFile = new FileOutputStream(xlsxFilePath);
    xlswb.write(xlsxFile);

    xlswb.close();
    xlsxwb.close();
    xlsFile.close();
    xlsxFile.close();
    
    }
    
    public static void main (String args[]) throws IOException {
        
        xlstoxlsx.convert("C:\\Users\\user\\Desktop\\Test1.xls", "C:\\Users\\user\\Desktop\\Test2.xlsx");
        
    }

}

Exception in thread "main" org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
    at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:130)
    at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:117)
    at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:285)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:400)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:381)
    at Test.xlstoxlsx.convert(xlstoxlsx.java:15)
    at Test.xlstoxlsx.main(xlstoxlsx.java:35)

我在这里做错了什么?有没有更好的方法可以将 .xls 转换为 .xlsx 格式?

Java Excel Apache - POI

评论

2赞 Mark Rotteveel 10/25/2023
你能发布整个堆栈跟踪吗?要么你正在加载已经是 XLSX 的东西,要么你试图组合将 HSSF 的东西写入 XSSF 而没有正确转换它们。
0赞 aled 10/25/2023
对日志使用代码格式,而不是引用格式。Quote 适用于人工文本,而不是日志和其他预先格式化的文本。Quote 破坏了日志的现有格式,使其非常难以阅读,并妨碍了尝试复制文本进行调查。
0赞 justcurious 10/26/2023
@MarkRotteveel我已经发布了整个堆栈跟踪。希望对你有所帮助!
2赞 Mark Rotteveel 10/26/2023
错误和堆栈跟踪建议表明该文件已经是 XLSX。
0赞 justcurious 10/27/2023
我非常确定我正在使用 .xls 文件。我无法附加我正在使用的文件。您可以尝试使用简单的 .xls 文件,但会遇到相同的错误

答: 暂无答案