我正在使用 Apache POI 创建、访问和修改 *.xlsx 和 *.xls 文件。我一直在更改单元格格式(不要与样式混淆)。
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue(100); // setting cell value with double makes it numeric -> 100 aligned to the right
cell.setCellType(1); // changing cell format to text -> 100.0 aligned to the left
cell.setCellType(0); // changing cell format back to numeric -> 0 aligned to the right
FileOutputStream fos = new FileOutputStream("test.xlsx");
wb.write(fos);
有人可能认为在文本和数字格式之间进行更改会导致数据被 0 替换。但是对更多单元格尝试相同的操作会产生一些更意想不到的结果:
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
for(int i=0;i<10;i++){
Row row = sheet.createRow(i);
for(int j=0;j<10;j++){
Cell cell = row.createCell(j);
cell.setCellValue(i*j);
cell.setCellType(1);
cell.setCellType(0);
}
}
FileOutputStream fos = new FileOutputStream("test.xlsx");
wb.write(fos);
预期的输出是乘法表。嗯……不是的。实际上改变 i 和 j 的范围会影响相同单元格地址的结果。
这是 Apache POI 中的错误吗?也许是由于OOXML规范,实际上是微软的错误?或者我的电脑出了什么问题,你的输出文件看起来应该是这样的?