0

サイト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 が私のバージョンにないためです。

4

1 に答える 1

1

生成された Excel ドキュメントのResultワークシートを確認しましたか?

入門ガイドの例では、テンプレート シートは変更されず、applyAtメソッドに渡されたCellRefパラメーターによって示されるように、すべての出力が結果シートに生成されます。

xlsArea.applyAt(new CellRef("Result!A1"), context);

テンプレート シートにデータを入力する場合は、applyAtメソッドに適切なCellRefを指定する必要があります。たとえば、テンプレート シートの名前がTemplateの場合、次のようなものが必要です。

xlsArea.applyAt(new CellRef("Template!A1"), context);
于 2015-07-07T08:29:47.953 に答える