最近、プロジェクトはWordドキュメントをエクスポートする必要があります。私は長い間一生懸命働いてきました。 Freemarkerテンプレートを使用する方が便利で便利であることがわかりました。参照の重要な手順を要約します。これがテストペーパー生成の簡単な例です。
1。テンプレートの生産
下の図に示すように、最初に単語を使用してテンプレートを作成します。
(上に表があることに注意してください。ボーダーを見えないように設定してからXMLファイルとして保存してから、ツールを使用してXMLファイルを開きます。誰かがFirstObject XMLエディターを使用して、メモ帳++ほど良くないと感じます。ここでは、主に強調表示され、要素と自動的にペアになっているため、ここでNotepad ++を使用しています。効果は次のとおりです。
上の黒い場所は、基本的に後で交換したい場所です。たとえば、xytitleが$ {xytitle}に置き換えられている場合、テーブルに細心の注意を払う必要があります。たとえば、以下の複数選択の質問の下の表は、複数選択の質問を検索することで配置できます。 <w:tr> </w:tr>のペアは、行、つまりレコード(質問)を表します。ここでは、その後データを入力するために、<#List> </#リスト>のペアを使用して含める必要があります。詳細については、Freemarkerページの文法を参照してください。たとえば、複数選択の質問には2つの動作と1つのレコードがあるため、次のように2つの行を含めるには<#LIST> </#LIST>が必要です。<#LIST Table1としての質問番号質問</w:w:w:tr> option </w:tr> </#list>、およびxzn、xzn、xzn、xzn、xzn、 $ {plan1.xzn}、$ {plan1.xztest}、$ {plan1.ans1}、$ {plan1.ans2}、$ {plan1.ans3}、$ {plan1.ans4}、$ {plan1.ans4}で置き換えます。表1および後続の充填データを使用する必要があります。他の代替品は同じであり、結果は次のとおりです。
保存後、接尾辞名をFTLに変更すると、テンプレートが完了します。
2。プログラミングの実装
FreeMarker-2.3.13.Jarパッケージはここで使用されており、コードは次のとおりです。
パッケージ共通。 java.io.bufferedwriterをインポートします。 java.io.fileをインポートします。 java.io.filenotfoundexceptionをインポートします。 java.io.fileoutputStreamをインポートします。 java.io.ioexceptionをインポートします。 java.io.outputStreamWriterをインポートします。 java.io.unsupportedencodingexceptionをインポートします。 java.io.writerをインポートします。 java.util.mapをインポートします。 freemarker.template.configurationをインポートします。 freemarker.template.templateをインポートします。 freemarker.template.templateをインポートします。 freemarker.template.templateExceptionをインポートします。 public class documenthandler {private configuration configuration = null; public documenthandler(){configuration = new Configuration(); configuration.setDefaultEncoding( "utf-8"); } public void createdoc(map <string、object> datamap、string filename)unsupportedencodingexception {// dataMap {// moduloスクリプトのデータファイルを入力して、moduloスクリプトデバイスメソッドとパスを設定すると、Freemarkerは複数のテンプレートの読み込みメソッドをサポートします。再利用、ClassPath、およびデータベースの読み込みができます。 //ここで、テンプレートはテンプレートパッケージConfiguration.setClassFortEmPlatEloading(this.getClass()、 "/template")の下に配置されます。テンプレートt = null; try {//test.ftlは、ロードされるテンプレートt = configuration.getTemplate( "fctestpaper.ftl"); } catch(ioexception e){e.printstacktrace(); } //ドキュメントパスと名前ファイルoutfile = new file(filename); writer out = null; fileoutputStream fos = null; try {fos = new fileoutputStream(outfile); outputStreamWriter owriter = new outputStreamWriter(fos、 "utf-8"); //この場所は、ストリーミングをエンコードするために不可欠です。 Main()を使用して個別に呼び出されると、問題は問題ありませんが、エクスポートするWebリクエストの場合、エクスポート後にWordドキュメントが開かれず、パッケージXMLファイルが間違っています。主な理由は、エンコード形式が正しくなく、解析できないことです。 // out = new BufferedWriter(new outputStreamWriter(new FileOutputStream(OutFile))); out = new BufferedWriter(Owriter); } catch(filenotfoundexception e1){e1.printstacktrace(); } try {t.process(datamap、out); out.close(); fos.close(); } catch(templateException e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); } //System.out.println("-----------------------------------------------------------------------------------------------------------------次に、データコールを準備します。コードは次のとおりです。
パッケージcom.havenliu.document; java.io.unsupportedencodingexceptionをインポートします。 java.util.arraylistをインポートします。 java.util.hashmapをインポートします。 java.util.listをインポートします。 java.util.mapをインポートします。 public class main { / ** * @param args * @throws unsupportedencodingexception * / public static void main(string [] args)throws unsupportedencodingexception {; map <string、object> datamap = new Hashmap <string、object>(); datamap.put( "xytitle"、 "exampaper"); int index = 1; //複数の選択肢<マップ<文字列、オブジェクト>> list1 = new ArrayList <Map <String、Object >>(); //質問リスト<Map <String、object >> list11 = new ArrayList <Map <String、object >>(); //回答index = 1; for(int i = 0; i <5; i ++){map <string、object> map = new hashmap <string、object>(); map.put( "xzn"、index + "。"); map.put( "xztest"、 "()オペレーティングシステムを使用すると、複数の端子を同時に1つのホストに接続でき、複数のユーザーがそれぞれの端子を介してコンピューターを同時にインタラクティブに使用できます。」 map.put( "ans1"、 "a" + index); map.put( "ans2"、 "b" + index); map.put( "ans3"、 "c" + index); map.put( "ans4"、 "d" + index); list1.add(map); map <string、object> map1 = new hashmap <string、object>(); map1.put( "fuck"、index + "。"); map1.put( "abc"、 "a" + index); list11.add(map1);インデックス++; } datamap.put( "table1"、list1); datamap.put( "table11"、list11); //ブランクスリストに記入<マップ<文字列、オブジェクト>> list2 = new arrayList <map <string、object >>(); list <map <string、object >> list12 = new ArrayList <Map <String、object >>(); index = 1; for(int i = 0; i <5; i ++){map <string、object> map = new hashmap <string、object>(); map.put( "tkn"、index + "。"); map.put( "tktest"、 "オペレーティングシステムは、コンピューターシステムの___システムソフトウェア________であり、コンピューターシステムで_________を管理および制御します。"); list2.add(map); map <string、object> map1 = new hashmap <string、object>(); map1.put( "fill"、index + "。"); map1.put( "def"、 "中間スケジューリング" +インデックス); list12.add(map1);インデックス++; } datamap.put( "table2"、list2); datamap.put( "table12"、list12); //判断質問リスト<Map <String、Object >> list3 = new ArrayList <Map <String、Object >>(); List <Map <String、Object >> list13 = new ArrayList <Map <String、object >>(); index = 1; for(int i = 0; i <5; i ++){map <string、object> map = new hashmap <string、object>(); map.put( "pdn"、index + "。"); map.put( "pdtest"、 "Compositeファイアウォールファイアウォールは、内部ネットワークと外部ネットワークの間の分離点であり、アプリケーションレイヤーの通信フローを監視および分離する役割を果たし、フィルターの関数と組み合わせることもよくあります。 list3.add(マップ); map <string、object> map1 = new hashmap <string、object>(); Map1.put( "Judge"、index + "。"); map1.put( "hij"、 "v" + index); list13.add(map1);インデックス++; } datamap.put( "table3"、list3); datamap.put( "table13"、list13); //短い回答質問リスト<Map <String、Object >> list4 = new ArrayList <Map <String、Object >>(); List <Map <String、Object >> list14 = new ArrayList <Map <String、object >>(); index = 1; for(int i = 0; i <5; i ++){map <string、object> map = new hashmap <string、object>(); map.put( "jdn"、index + "。"); map.put( "jdtest"、 "ジョブスケジューリング、中間スケジューリング、プロセススケジューリングの違いを説明し、次の問題に責任を負うスケジューラのレベルを分析します。」); list4.add(Map); map <string、object> map1 = new hashmap <string、object>(); map1.put( "Answer"、index + "。"); map1.put( "xyz"、 "ジョブスケジューリング、中間スケジューリング、プロセススケジューリングの違いを説明し、スケジューラのレベルが次の問題に責任を負うべきであるかを分析します。」 list14.add(map1);インデックス++; } datamap.put( "table4"、list4); datamap.put( "table14"、list14); mdoc mdoc = new Mdoc(); mdoc.createdoc(datamap、 "e:/outfile.doc"); }}上記のマップのキーはテンプレートに対応する必要があることに注意してください。そうしないと、エラーが報告されます。効果は次のとおりです。
上記はこの記事のすべての内容です。私はそれがすべての人の学習に役立つことを願っています、そして、私は誰もがwulin.comをもっとサポートすることを願っています。