Javaで取得した値をエクセルにバーコード出力したいのですが、うまくいきません。やったことは以下になります。
①テンプレートファイルのA1セルに111と入力。
②Microsoft barcode control のプロパティからL inkedCellをA1に設定。Valueが111であることを確認。
③Javaから111を222に変更して別名ファイルとして保存
④Javaから作成されたファイルを開くと、A1セルの値は222に変更されているが、バーコードの値は111のままになっている。ここでA1セルをダブルクリックするとバーコードの値は222に変わる。
やりたいことはJavaから作成されたファイルを開いたら、バーコードの値も222に変わっていて欲しい。
説明がわかりにくいかと思いますが、実現は可能でしょうか?
(2019/12/10 追記)
Javaのソースは以下になります。
また、出力されたファイルのプロパティ「EnableCalculation」を
False⇒Trueにした時にもバーコードの値が111から222に変更されます。
(元のEnableCalculationはTrue)
どうやら再計算を行えば反映されるようなのですが…。
〜Javaのソース開始〜
// テンプレートファイル
FileInputStream filein = new FileInputStream("C:/template_test.xls");
// 出力ファイル
FileOutputStream out = new FileOutputStream("C:/test.xls");
//ワークブックを読み込み
HSSFWorkbook wb = new HSSFWorkbook(filein);
//シートを読み込み
HSSFSheet sheet = wb.getSheet("Sheet1");
for (int rowIdx = sheet.getFirstRowNum(); rowIdx <= sheet.getLastRowNum(); rowIdx++) {
HSSFRow row = sheet.getRow(rowIdx);
if (row == null) {
continue;
}
for (int colIdx = row.getFirstCellNum(); colIdx < row.getLastCellNum(); colIdx++) { short col = Short.parseShort(String.valueOf(colIdx)); HSSFCell cell = row.getCell(col); if (cell == null) { continue; } // テンプレートファイルの111を222に変更 if(cell.getStringCellValue().equals("111")) { cell.setCellValue("222"); } }
}
// ファイル書き込み
wb.write(out);
// 処理をクローズ
out.close();
filein.close();
〜Javaのソース終了〜
ファイル書き込み前に「wb.setForceFormulaRecalculation(true);」とか
「sheet.setForceFormulaRecalculation(true);」とかで再計算すれば反映されそうですが、
現在のPOIのバージョンが古いのかsetForceFormulaRecalculationメソッドが存在しません…。