在我的系统中,我有一个用一些数据创建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();
}
}
}
}
据我所知,代码工作得很好,我在Ubuntu上开发并且总是首先在这里尝试代码,创建的excels很好,我没有任何问题。
当我把其中一个带到Windows(XP和7,两者都试过)时,我无法使用Microsoft Excel打开它们。
有没有人有这方面的经验?
谢谢。
答案 0 :(得分:2)
正如Axel所说,问题是文件扩展名。
我可以在Ubuntu(14.04和16.04)中打开以这种方式创建的文件,但不能在Windows(7,8和10)中打开。
解决方案是使用.xls
扩展名而不是.xlsx
,这样我就可以打开并使用任何操作系统中的文件。
答案 1 :(得分:0)
HSSF是Office 97 * .xls格式。 (它代表 H 糟糕的 S pread s heet F ormat。)
} catch (FileNotFoundException e) {
workbook = new HSSFWorkbook();
}
这样做时,选择了* .xls格式。如果要使用* .xlsx格式,则需要使用XSSFWorkbook
。
https://poi.apache.org/components/spreadsheet/quick-guide.html#NewWorkbook