サイトhttp://jxls.sourceforge.net/getting_started.htmlの例に従ってください。処理済みファイルを書き込もうとしたときに問題が発生しました。JEXL によって置き換えられるべきデータを書き込む代わりに、テンプレート ファイルを単にコピーして貼り付けるかのように、テンプレート ファイルを再度書き込むだけです。
これは私のテンプレートファイルがどのように見えるかです:
そして、これはそれが出力するものです:
私のコードはガイドとほぼ同じなので、なぜ私のコードが彼らのコードと異なる動作をするのかわかりません. それに影響を与える可能性のある変更が1つあり、それはcreateInitialContext()
の代わりに使用していましたgetInitialContext()
。その理由はgetInitialContext()
、jar が両方とも同じ (2.0.0) であるにもかかわらず、何らかの理由で my jar にメソッドが含まれていなかったにもかかわらず、メソッドが含まれていたcreateInitialContext()
ためです。私のデバッグから、xls 領域のサイズが 4 から 63 に変更されるため、コードがデータを処理し、JEXL を適切なデータに置き換えるように見えます。
私のコード:
InputStream is = getClass().getResourceAsStream("/transactions_template.xls");
OutputStream os = new FileOutputStream(file);
Transformer transformer = TransformerFactory.createTransformer(is, os);
AreaBuilder areaBuilder = new XlsCommentAreaBuilder(transformer);
List<Area> xlsAreaList = areaBuilder.build();
Area xlsArea = xlsAreaList.get(0);
Context context = transformer.createInitialContext();
context.putVar("transactions", transactions);
xlsArea.applyAt(new CellRef("Result!A1"), context);
transformer.write();
is.close();
os.close();
TLDR: JXLS は JEXL を処理するようですが、代わりにテンプレート ファイルを書き込みます。元のガイドの getInitialContext を createInitialContext に変更しました。これは、ガイドが私のバージョン 2.0.0 を使用しているにもかかわらず、createInitialContext が私のバージョンにないためです。