日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#将内容导出到Word到指定模板

發布時間:2025/3/14 C# 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#将内容导出到Word到指定模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

昨天做了下導入導出Excel文件,今天研究了下導出Word文件。 從網上找了半天才找到了一個能導出到指定模板的,在這里總結下。

導出模板原理就是利用的替換占位符。

我這里先建立好了一個模板,

接下來寫代碼進行導出,

前端就一段AJAX調用,這里我就不寫了,直接上后端代碼,看下面:

/// <summary>/// 導出Word文件/// </summary>/// <returns></returns> [HttpPost]public ActionResult LeadWord(){#region 動態創建DataTable數據DataTable tblDatas = new DataTable("Datas");DataColumn dc = null;//賦值給dc,是便于對每一個datacolumn的操作dc = tblDatas.Columns.Add("ID", Type.GetType("System.Int32"));dc.AutoIncrement = true;//自動增加dc.AutoIncrementSeed = 1;//起始為1dc.AutoIncrementStep = 1;//步長為1dc.AllowDBNull = false;// dc = tblDatas.Columns.Add("name", Type.GetType("System.String"));dc = tblDatas.Columns.Add("sex", Type.GetType("System.String"));dc = tblDatas.Columns.Add("age", Type.GetType("System.String"));dc = tblDatas.Columns.Add("str1", Type.GetType("System.String"));dc = tblDatas.Columns.Add("str2", Type.GetType("System.String"));dc = tblDatas.Columns.Add("str3", Type.GetType("System.String"));dc = tblDatas.Columns.Add("str4", Type.GetType("System.String"));dc = tblDatas.Columns.Add("str5", Type.GetType("System.String"));dc = tblDatas.Columns.Add("str6", Type.GetType("System.String"));dc = tblDatas.Columns.Add("remark", Type.GetType("System.String"));DataRow newRow;newRow = tblDatas.NewRow();newRow["name"] = "張三";newRow["sex"] = "";newRow["age"] = "11";newRow["str1"] = "字符串1";newRow["str2"] = "字符串2";newRow["str3"] = "字符串3";newRow["str4"] = "字符串4";newRow["str5"] = "字符串5";newRow["str6"] = "字符串6";newRow["remark"] = "備注一下";tblDatas.Rows.Add(newRow);#endregion#region word要替換的表達式和表格字段的對應關系Dictionary<string, string> dic = new Dictionary<string, string>();dic.Add("$name$", "name");dic.Add("$sex$", "sex");dic.Add("$age$", "age");dic.Add("$str1$", "str1");dic.Add("$str2$", "str2");dic.Add("$str3$", "str3");dic.Add("$str4$", "str4");dic.Add("$str5$", "str5");dic.Add("$str6$", "str6");dic.Add("$remark$", "remark");#endregionstring tempFile = "~/Content/Word/temp.doc";string saveFile = "~/Content/Word/1.doc";WordUtility w = new WordUtility(tempFile, saveFile);w.GenerateWord(tblDatas, dic, null);return Content("ok");}

Helper Class(WordUtility.cs)

using System; using System.Collections.Generic; using System.Data; using Word = Microsoft.Office.Interop.Word; using System.IO; using System.Windows.Forms; using System.Runtime.Remoting.Contexts;namespace Headfree.DefUI {/// <summary>/// 使用替換模板進行到處word文件/// </summary>public class WordUtility{private object tempFile = null;private object saveFile = null;private static Word._Document wDoc = null; //word文檔private static Word._Application wApp = null; //word進程private object missing = System.Reflection.Missing.Value;public WordUtility(string tempFile, string saveFile){tempFile=System.Web.HttpContext.Current.Server.MapPath(tempFile);saveFile = System.Web.HttpContext.Current.Server.MapPath(saveFile); this.tempFile = Path.Combine(Application.StartupPath, @tempFile);this.saveFile = Path.Combine(Application.StartupPath, @saveFile);}/// <summary>/// 模版包含頭部信息和表格,表格重復使用/// </summary>/// <param name="dt">重復表格的數據</param>/// <param name="expPairColumn">word中要替換的表達式和表格字段的對應關系</param>/// <param name="simpleExpPairValue">簡單的非重復型數據</param>public bool GenerateWord(DataTable dt, Dictionary<string, string> expPairColumn, Dictionary<string, string> simpleExpPairValue){if (!File.Exists(tempFile.ToString())){return false;}try{wApp = new Word.Application();wApp.Visible = false;wDoc = wApp.Documents.Add(ref tempFile, ref missing, ref missing, ref missing);wDoc.Activate();// 當前文檔置前bool isGenerate = false;if (simpleExpPairValue != null && simpleExpPairValue.Count > 0)isGenerate = ReplaceAllRang(simpleExpPairValue);// 表格有重復if (dt != null && dt.Rows.Count > 0 && expPairColumn != null && expPairColumn.Count > 0)isGenerate = GenerateTable(dt, expPairColumn);if (isGenerate)wDoc.SaveAs(ref saveFile, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);DisposeWord();return true;}catch (Exception ex){ return false;}}/// <summary>/// 單個替換 模版沒有重復使用的表格/// </summary>/// <param name="dc">要替換的</param>public bool GenerateWord(Dictionary<string, string> dc){return GenerateWord(null, null, dc);}private bool GenerateTable(DataTable dt, Dictionary<string, string> expPairColumn){try{int tableNums = dt.Rows.Count;Word.Table tb = wDoc.Tables[1];tb.Range.Copy();Dictionary<string, object> dc = new Dictionary<string, object>();for (int i = 0; i < tableNums; i++){dc.Clear();if (i == 0){foreach (string key in expPairColumn.Keys){string column = expPairColumn[key];object value = null;value = dt.Rows[i][column];dc.Add(key, value);}ReplaceTableRang(wDoc.Tables[1], dc);continue;}wDoc.Paragraphs.Last.Range.Paste();foreach (string key in expPairColumn.Keys){string column = expPairColumn[key];object value = null;value = dt.Rows[i][column];dc.Add(key, value);}ReplaceTableRang(wDoc.Tables[1], dc);}return true;}catch (Exception ex){DisposeWord(); return false;}}private bool ReplaceTableRang(Word.Table table, Dictionary<string, object> dc){try{object replaceArea = Word.WdReplace.wdReplaceAll;foreach (string item in dc.Keys){object replaceKey = item;object replaceValue = dc[item];table.Range.Find.Execute(ref replaceKey, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref replaceValue, ref replaceArea, ref missing, ref missing, ref missing,ref missing);}return true;}catch (Exception ex){DisposeWord();return false;}}private bool ReplaceAllRang(Dictionary<string, string> dc){try{object replaceArea = Word.WdReplace.wdReplaceAll;foreach (string item in dc.Keys){object replaceKey = item;object replaceValue = dc[item];wApp.Selection.Find.Execute(ref replaceKey, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref replaceValue, ref replaceArea, ref missing, ref missing, ref missing,ref missing);}return true;}catch (Exception ex){ return false;}}private void DisposeWord(){object saveOption = Word.WdSaveOptions.wdSaveChanges;wDoc.Close(ref saveOption, ref missing, ref missing);saveOption = Word.WdSaveOptions.wdDoNotSaveChanges;wApp.Quit(ref saveOption, ref missing, ref missing); //關閉Word進程 }} }

?

好了,代碼就這么多,來看下導出效果吧:

ZJ。。。

?

轉載于:https://www.cnblogs.com/shuai7boy/p/6984941.html

總結

以上是生活随笔為你收集整理的C#将内容导出到Word到指定模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。