具體思路:
1.先制作Word模版,使用文本框+書簽的方式來設計模版;
2.模版制作完之后,根據模版生成新文件,使用File.Copy方法,生成.doc格式新文件;
3.后台取得數據,參照網頁渲染的方式標記數據流,方便之后的寫入操作;
4.編輯新文件,根據程序中標記與書簽的對應關系,利用類庫中的方法來修改書簽的內容,最后保存文件即可。
優點:
能夠自定義元素的位置,方法也很簡單易懂,如果只是表格之類的簡單格式會很適用。
缺點:
靈活性不好,如果要套打的對象是網頁,且不是表格形式的,還原程度不好,而且如果文字內容過多會出現超出文本框范圍的情況。
操作過程&代碼:
1)第一步,引入對應的程序集
如果不是使用第三方的類庫的話,是不需要下載的,只要你的系統完整安裝了office,你的系統程序集中就會帶有操作Word的程序集。
首先,添加引用Microsoft.Office.Interop.Word,之后,在類中添加相對應的引用:
using MSWord = Microsoft.Office.Interop.Word; //這里重命名為MSWord,之后使用的時候就可以簡寫了 using System.IO;//要操作文件的話,要引用系統IO using System.Reflection;
2)准備工作
MSWord.Application wordApp = new MSWord.Application();//word應用程序變量 MSWord.Document wordDoc;//word文檔變量 string TemplateFile = @"D:\Model.doc"; //模版文件的路徑, string FileName = @"D:\" + DateTime.Now.ToString("yyyyMMddHHmmssffffff") + ".doc";//新文件的路徑
3)拷貝模版生成新文件
File.Copy(TemplateFile, FileName);//首先要拷貝一份文件 object obj_FileName = FileName;//新建一個obj變量用於操作
4)設置操作類型,操作類型有很多中,這里要打開新文件,修改其中的內容
wordDoc = wordApp.Documents.Open(ref obj_FileName);//打開新文件,進行操作 wordDoc.Activate();//設置現在操作的文件
5)依據書簽修改word內容
//循環書簽,判斷書簽名稱,並為其賦值 foreach (MSWord.Bookmark bm in wordDoc.Bookmarks) { if (bm.Name == "billno") { bm.Select(); bm.Range.Text = "2008"; } if (bm.Name == "dated") { bm.Select(); bm.Range.Text = DateTime.Now.ToString(); } }
6)關閉文件
wordDoc.SaveAs2(obj_FileName);//保存文件 wordDoc.Close();//關閉文檔對象 wordApp.Quit();//關閉應用程序對象
7)殺進程,有的情況下,關閉Word文件會不成功,會殘留很多word進程
System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("WINWORD"); foreach (System.Diagnostics.Process p in processes) { bool b = p.MainWindowTitle == ""; if (p.MainWindowTitle == "") { p.Kill(); } }
8)下載
Response.Clear(); Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Path.GetFileName(FileName), System.Text.Encoding.UTF8)); Response.ContentType = "application/msword"; Response.TransmitFile(FileName); Response.Flush(); Response.End();
轉自:https://www.cnblogs.com/jydeng/p/4398500.html
具體思路:
1.先制作Word模版,使用文本框+書簽的方式來設計模版;
2.模版制作完之后,根據模版生成新文件,使用File.Copy方法,生成.doc格式新文件;
3.后台取得數據,參照網頁渲染的方式標記數據流,方便之后的寫入操作;
4.編輯新文件,根據程序中標記與書簽的對應關系,利用類庫中的方法來修改書簽的內容,最后保存文件即可。
優點:
能夠自定義元素的位置,方法也很簡單易懂,如果只是表格之類的簡單格式會很適用。
缺點:
靈活性不好,如果要套打的對象是網頁,且不是表格形式的,還原程度不好,而且如果文字內容過多會出現超出文本框范圍的情況。
操作過程&代碼:
1)第一步,引入對應的程序集
如果不是使用第三方的類庫的話,是不需要下載的,只要你的系統完整安裝了office,你的系統程序集中就會帶有操作Word的程序集。
首先,添加引用Microsoft.Office.Interop.Word,之后,在類中添加相對應的引用:
1 using MSWord = Microsoft.Office.Interop.Word; //這里重命名為MSWord,之后使用的時候就可以簡寫了 2 using System.IO;//要操作文件的話,要引用系統IO 3 using System.Reflection;
2)准備工作
1 MSWord.Application wordApp = new MSWord.Application();//word應用程序變量 2 MSWord.Document wordDoc;//word文檔變量 3 string TemplateFile = @"D:\Model.doc"; //模版文件的路徑, 4 string FileName = @"D:\" + DateTime.Now.ToString("yyyyMMddHHmmssffffff") + ".doc";//新文件的路徑
3)拷貝模版生成新文件
1 File.Copy(TemplateFile, FileName);//首先要拷貝一份文件 2 object obj_FileName = FileName;//新建一個obj變量用於操作
4)設置操作類型,操作類型有很多中,這里要打開新文件,修改其中的內容
1 wordDoc = wordApp.Documents.Open(ref obj_FileName);//打開新文件,進行操作 2 3 wordDoc.Activate();//設置現在操作的文件
5)依據書簽修改word內容
1 //循環書簽,判斷書簽名稱,並為其賦值 2 foreach (MSWord.Bookmark bm in wordDoc.Bookmarks) 3 { 4 if (bm.Name == "billno") 5 { 6 bm.Select(); 7 bm.Range.Text = "2008"; 8 } 9 if (bm.Name == "dated") 10 { 11 bm.Select(); 12 bm.Range.Text = DateTime.Now.ToString(); 13 } 14 }
6)關閉文件
1 wordDoc.SaveAs2(obj_FileName);//保存文件 2 wordDoc.Close();//關閉文檔對象 3 wordApp.Quit();//關閉應用程序對象
7)殺進程,有的情況下,關閉Word文件會不成功,會殘留很多word進程
1 System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("WINWORD"); 2 foreach (System.Diagnostics.Process p in processes) 3 { 4 bool b = p.MainWindowTitle == ""; 5 if (p.MainWindowTitle == "") 6 { 7 p.Kill(); 8 } 9 }