プログラムから作成したxlsxファイルに同定用のデータをどうにか仕込んでおく必要があったので調べてみたら、Officeにはカスタムプロパティというメタデータを保存しておく仕組みがあったのでそれを使うことにした
POIからはこんな感じでアクセスできる
public String test() throws Exception {
XSSFWorkbook xssfWorkbook = (XSSFWorkbook) WorkbookFactory.create(new FileInputStream("hoge.xlsx"));
// 値の設定
xssfWorkbook.getProperties().getCustomProperties().addProperty("hoge", "fuga");
// 値の取得
for (CTProperty ctProperty : xssfWorkbook.getProperties().getCustomProperties().getUnderlyingProperties().getPropertyList()) {
if (ctProperty.getName().equals("hoge")) {
return ctProperty.getLpwstr();
}
}
return null;
}
文字列取得メソッドはgetLpwstr
の他にもgetBstr
とgetLpstr
があるけど、ここを見る限りJavaから読み書きするならUnicodeのgetLpwstr
使えばよさそう