*.xlsx および *.xls ファイルの作成、アクセス、および変更に Apache POI を使用しています。セル形式の変更に行き詰まりました (スタイルと混同しないでください)。
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 仕様によるもので、実際には Microsoft のミスでしょうか? または、私のコンピューターに何か問題があり、出力ファイルが本来のように見えますか?