C#讀取Word模板替換相應(yīng)的字符串(標(biāo)簽)生成新的Word
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
在平常工作中,生成word的方式主要是C#讀取html的模板文件處理之后保存為.doc文件,這樣的好處是方便,快捷,能滿足大部分的需求。不過(guò)有些特殊的需求并不能滿足,如要生成的Word為一個(gè)表格,只是一部分字符串需要變化,用上面的方法生成Word表格容易變形。如果我們能讀取一個(gè)word模板,把模板里定義的固定字符串如{標(biāo)記1}替換為想要的文字,然后生成新的word。這樣生成的Word非常整潔。 查找了網(wǎng)上許多方法,雖然都是調(diào)用office的接口,并沒(méi)有一個(gè)好的方案。通過(guò)自己的實(shí)驗(yàn),比較,使用Microsoft.Office.Interop.Word.dll調(diào)用相應(yīng)的查找全部命令,將相應(yīng)的標(biāo)簽替換為相應(yīng)的字符串比較好用。下面是實(shí)現(xiàn)方法。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using Microsoft.Office.Interop.Word; namespace Renfb.Word { public class Word { private object _outputname = ""; private object _inputname = ""; // 輸出文件名,將word另存為的文件名,絕對(duì)地址 public object OutPutName { get { return _outputname; } set { _outputname = value; } } //輸入文件名,Word的模板文件(還有相應(yīng)的標(biāo)記{biaoji1}或者任意字符串). 絕對(duì)地址 public object InPutName { get { return _inputname; } set { _inputname = value; } } public Word() { } public Word(object inputname,object outputname) { this._inputname = inputname; this._outputname = outputname; } private Dictionary _put = new Dictionary(); //param key標(biāo)記{biaoji1}或者要替換的任意字符串 // param value替換后的字符串 public void Put(string key, string value) { _put.Add(key, value); } #region 內(nèi)部變量 private object missValue = Missing.Value; private object trueValue = true; private object falseValue = false; private object oStory=WdUnits.wdStory; private object oMove=WdMovementType.wdMove; private ApplicationClass app = null; private Document doc=null; #endregion //打開文檔。 private void openDocument() { app = new ApplicationClass(); app.Visible = false; app.DisplayAlerts = WdAlertLevel.wdAlertsNone; doc = app.Documents.Open( ref _inputname, ref missValue, ref trueValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue ); } // 文檔另存為新Word文件。 private void saveAsDocument() { doc.SaveAs( ref _outputname, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue ); } // 將相應(yīng)的標(biāo)簽替換然后保存 public void Save() { if (string.IsNullOrEmpty(_inputname.ToString())) { throw new Exception("InPutName 不能為空,請(qǐng)輸入模板文件的地址。 InPutName為模板文件的絕對(duì)地址"); } if (string.IsNullOrEmpty(_outputname.ToString())) { throw new Exception("OutPutName 不能為空,請(qǐng)輸入保存模板文件的地址, OutPutName為模板文件的絕對(duì)地址"); } try { //打開Word文檔。 this.openDocument(); app.Selection.HomeKey(ref oStory,ref oMove); Find find = app.Selection.Find; find.ClearFormatting(); find.Replacement.ClearFormatting(); foreach (string key in _put.Keys) { find.Text = key; find.Replacement.Text = _put[key]; this.ExecuteReplace(find); } //將文檔另存為新文檔。 this.saveAsDocument(); } catch (Exception ex) { throw new Exception("錯(cuò)誤:" + ex.Message); } finally { app.Quit(ref missValue, ref missValue, ref missValue); } } private bool ExecuteReplace(Find find) { return this.ExecuteReplace(find, WdReplace.wdReplaceAll); } private bool ExecuteReplace(Find find, object objReplaceOption) { return find.Execute( ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref missValue, ref objReplaceOption, ref missValue, ref missValue, ref missValue, ref missValue ); } } } 使用方法很簡(jiǎn)單。相信大家都明白。代碼如下: string inputname = Server.MapPath("1.doc"); string outputname = Server.MapPath("3.doc"); Word word = new Word(inputname, outputname); word.Put("{documentVersion}", "2.6"); word.Put("{ProjectName}", "Renfb.Word"); word.Put("{author}", "Renfb"); word.Put("{CreateRiqi}", "2011.07.04"); word.Put("{Lianxiren}", "任鋒賓"); word.Put("{num}", "1"); word.Save(); 該文章在 2018/9/8 18:48:48 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |