10

docx4j 2.8.1のVariableReplaceの例の 2 番のアプローチに従いましたが、変数マーカー ${} を削除するだけです。

私が行った手順:

  • Word 2013 を開き、${variable} をテキストとしてのみ入力しました
  • どこかに保存しました
  • Java プログラムでそれを読み取り、.put("variable", "TEST"); で HashMap を構築します。
  • 他のコードは上記の例からコピーして貼り付けます。
  • ドキュメントを保存しました

「TEST」のみを期待し、出力ドキュメントにマーカーなしで「変数」のみを取得します。

4

3 に答える 3

28

間違いなく、Word は、文法またはスペル フラグを使用して、「変数」を実行全体に分割しています。

VariablePrepareで修正する

WordprocessingMLPackage をインスタンス化した後、次の行を挿入します。

VariablePrepare.prepare(wordMLPackage);

次に、マッピングを使用して変数を置き換えることができます。

于 2013-06-17T08:40:35.677 に答える
2

これは古い投稿だと思いますが、これに出くわした他の人にとって、この結果が得られる別の理由は、HashMap に間違った「キー」がある場合です。私の場合、古いxml形式をキーとして使用していました

.put("<variable/>","TEST");

私が使用していたはずのとき:

.put("variable","TEST");

ドキュメント自体は次のようなタグを使用していました

${variable}

VariableReplace コードは、一致が見つかったかどうかにかかわらず、${} フォーマットを削除します。そのため、一致が見つからない場合、何らかの理由でキーがドキュメント内のキーと一致しない可能性があり、これは厳密には VariablePrepare に関連していない可能性があります。しかし、VariablePrepare、VariableReplace ソリューションが現在私の目的のために機能しているため、これは私にとって非常に役立つ投稿でした。

また、VariablePrepare でさえ、ドキュメントのタグの途中でフォント、強調表示、またはその他の書式を変更する場合を処理できるかどうかはわかりません。このような場合、タグを単一の実行にマージすることができないため、タグの認識に失敗する可能性があります。

于 2013-08-19T22:01:33.170 に答える