无法在 Windows 上打开使用 apache poi (Java) 创建的 Excel 文件

May*_*uso 6 java windows excel apache-poi

在我的系统中,我有一个类可以用一些数据创建一个 excel。

基本上我从变量 ArrayList> 中读取所有 String 值并将它们写入 Excel 单元格中。

public void writeData(Data data, int sheetNumber)
        throws EncryptedDocumentException, InvalidFormatException, IOException {
    org.apache.poi.ss.usermodel.Workbook workbook;

    try {
        workbook = WorkbookFactory.create(new File(path));
    } catch (FileNotFoundException e) {
        workbook = new HSSFWorkbook();
    }

    org.apache.poi.ss.usermodel.Sheet sheet;
    try {
        sheet = workbook.createSheet("Sheet" + sheetNumber);
    } catch (IllegalArgumentException e) {
        sheet = workbook.getSheet("Sheet" + sheetNumber);
    }

    int dataListSize = data.getData().size();
    for (int i = 0; i < dataListSize; i++) {
        Row row = sheet.createRow(i);
        int rowSize = data.getData().get(i).size();
        for (int j = 0; j < rowSize; j++) {
            row.createCell(j);
            row.getCell(j).setCellValue(String.valueOf(data.getData().get(i).get(j)));
        }
    }
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(new File(path));
        workbook.write(fos);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        workbook.close();
        if (fos != null) {
            try {

                fos.flush();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

据我所知,代码运行良好,我在 Ubuntu 上开发并且总是先在这里尝试代码,创建的 excel 很好,我完全没有问题。

当我将其中一个带到 Windows(XP 和 7,都尝试过)时,我无法使用 Microsoft Excel 打开它们中的任何一个。

有人对这个有经验么?

谢谢你。

pro*_*ter 5

HSSF 是 Office 97 *.xls 格式。(它代表可怕电子表格格式

} catch (FileNotFoundException e) {
    workbook = new HSSFWorkbook();
}
Run Code Online (Sandbox Code Playgroud)

当您这样做时,您选择了 *.xls 格式。XSSFWorkbook如果您想要*.xlsx 格式,则需要使用。

https://poi.apache.org/components/spreadsheet/quick-guide.html#NewWorkbook

在此输入图像描述

https://poi.apache.org/components/spreadsheet/


May*_*uso 4

正如阿克塞尔提到的,问题出在文件扩展名上。

我可以在 Ubuntu(14.04 和 16.04)中打开以这种方式创建的文件,但不能在 Windows(7、8 和 10)中打开。

解决方案是使用.xls扩展名而不是 NOT .xlsx,这样我就可以在任何操作系统中打开和使用这些文件。