asp.net使用動態模版導出word


具體思路:

  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     }
復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM