[C#]TemplateEngine.Docx Word產出好工具
GitHub-TemplateEngine.Docx
本篇使用TemplateEngine.Docx套件來達到Word套表,很適合用在固定的格式,當然作法首先要先作好1個Word檔,也就是要套表的格式,再透過程式將資料寫到自己設定好的Word檔中,產生Word docx檔。
作法如下,因為我自己有時候會把一些筆記寫在Word檔(方便還可以截圖),所以我就不把步驟重新寫一次,直接截圖貼圖上來。
Step 8.程式碼部分
Imports System
Imports System.IO
Imports TemplateEngine.Docx
Partial Class test_TemplateEngine
Inherits System.Web.UI.Page
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'法1.套表完後,儲存在TempWord資料夾
'step1. 設定路徑
Dim str_temppath As String = String.Empty, str_NewFileName As String = String.Empty
'給套表後的檔案(新的檔案)一個檔名,這裡用 字串_帳號_時間來設定檔名
str_NewFileName = "table_1060403_" & DateTime.Now.ToString("yyyyMMddHHmmss") & ".docx"
'設定套表完後的檔案暫存位置
str_temppath = Server.MapPath("~/TempWord/") & str_NewFileName
'拷貝TemplateWord目錄底下的table2.docx檔案 到 TempWord目錄底下
File.Copy(Server.MapPath("~/TemplateWord/table2.docx"), str_temppath)
'step2. 設定要填入的資料 Content
Dim valuesToFill As Content = Nothing
valuesToFill = New Content()
valuesToFill.Fields.Add(New FieldContent("YEAR", "106")) '指定YEAR填入的資料是106
'step3. 儲存變更
Using OD1 As TemplateProcessor = New TemplateProcessor(str_temppath).SetRemoveContentControls(True)
OD1.FillContent(valuesToFill)
OD1.SaveChanges()
End Using
'============================================================
''法2.套表完後,並下載檔案
''step1. 設定路徑
'Dim str_temppath As String = String.Empty, str_NewFileName As String = String.Empty
''給套表後的檔案(新的檔案)一個檔名,這裡用 字串_帳號_時間來設定檔名
'str_NewFileName = "table_1060403_" & DateTime.Now.ToString("yyyyMMddHHmmss") & ".docx"
''設定套表完後的檔案暫存位置
'str_temppath = Server.MapPath("~/TempWord/") & str_NewFileName
''拷貝TemplateWord目錄底下的table2.docx檔案 到 TempWord目錄底下
'File.Copy(Server.MapPath("~/TemplateWord/table2.docx"), str_temppath)
''step2. 設定要填入的資料 Content
'Dim valuesToFill As Content = Nothing
'valuesToFill = New Content()
'valuesToFill.Fields.Add(New FieldContent("YEAR", "106")) '指定YEAR填入的資料是106
''step3. 儲存變更
'Using OD1 As TemplateProcessor = New TemplateProcessor(str_temppath).SetRemoveContentControls(True)
' OD1.FillContent(valuesToFill)
' OD1.SaveChanges()
'End Using
''step4. 檔案下載
'Dim buff() As Byte = Nothing
'Response.Clear()
'Response.ContentType = "application/octet-stream"
'Response.AddHeader("content-disposition", "attachment;filename=" & str_NewFileName)
'buff = File.ReadAllBytes(str_temppath)
'File.Delete(str_temppath) '刪除檔案
'Response.BinaryWrite(buff)
'Response.End()
End Sub
End Class
Step 9.最後請執行程式,看是否成功。
補充:
在開發專案過程中,遇到ListItem與TemplateEngine.Docx會有所衝突,例如以下這行程式碼:
DropDownList1.Items.Insert(0, New ListItem("請選擇項目", "0"))
看似很正常,但是Visual Studio就會針對New ListItem發現錯誤,錯誤代碼BC30516。
你只需要拿掉Imports TemplateEngine.Docx或者要明確的指定Content型態類別
再將原本這段
Dim valuesToFill As Content = Nothing
valuesToFill = New Content()
valuesToFill.Fields.Add(New FieldContent("YEAR", "106"))
程式碼改為
Dim valuesToFill As TemplateEngine.Docx.Content = Nothing
valuesToFill = New TemplateEngine.Docx.Content()
valuesToFill.Fields.Add(New TemplateEngine.Docx.FieldContent("YEAR", "106")) '學年度
沒有留言:
張貼留言