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 打开它们中的任何一个。
有人对这个有经验么?
谢谢你。
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/
正如阿克塞尔提到的,问题出在文件扩展名上。
我可以在 Ubuntu(14.04 和 16.04)中打开以这种方式创建的文件,但不能在 Windows(7、8 和 10)中打开。
解决方案是使用.xls扩展名而不是 NOT .xlsx,这样我就可以在任何操作系统中打开和使用这些文件。