簡介:
Spire.Doc for .NET 是一個專門為開發人員設計的能在任意的 .NET 平台上快速和高質量的創建、讀取、寫入、轉換和打印 word 文檔文件的 .NET 組件。作為一個獨立的 .NET 組件,Spire.Doc for .NET 不必在電腦上安裝微軟 Word 。但是,它卻可以將微軟 Word 文檔創建功能並入任何開發人員的 .NET 應用程序中。
主要優點:
1、不需要安裝 Microsoft Office
相比較於通過 Microsoft Office 自動轉化格式時的不穩定、緩慢和不可擴展,Spire.Doc for .NET 在拋開 Microsoft Office 的束縛后顯得相對獨立,而且其遠勝於 Microsoft Office 的高效性、穩定性和可擴展性也讓開發人員不再束手束腳 。
2、能高質量的轉化文件
通過 Spire.Doc for .NET,開發人員可以將 Word 保存到文本流、保存為 Web 響應,也可以將 Word 轉化為 XML、RTF、EMF、TXT、XPS、EPUB、HTML、SVG,反過來轉化也可以 。同時 Spire.Doc for .NET 也支持將 Word 轉化為 PDF 、HTML 轉化為圖片 。
3、豐富的Word文檔功能支持
Spire.Doc for .NET 的一個最常用的用法就是動態創建Word文檔 。幾乎所有的 Word 文檔元素都得到了 Spire.Doc for .NET 的支持,包括頁面,頁眉、頁腳、腳注部分,段落,列表,表格,文本字段,超鏈接,書簽,評論,圖片,風格,背景設置,打印功能,文檔設置和保護 。此外,圖形對象包括形狀、文本框、圖片、OLE對象和控件也得到支持 。
4、可簡單的處理現有 Word 文檔
Spire.Doc for .NET 可幫助開發人員簡單的處理 Word 文檔,它支持搜索和替換功能、對准、分頁符、填補領域、文件連接、文件拷貝、打印、復雜和深層嵌套的郵件合並等等 。
使用:
通過NuGet獲取 Install-Package Spire.Office
里面包含了Doc,XLS,PDF,EMail、、、等
使用場景,根據模板替換模板里面的數據
1:基類
/// <summary> /// 導出基類 /// </summary> public class ExportBase { /// <summary> /// 根據屬性獲取值 /// </summary> /// <param name="propertyName"></param> /// <returns></returns> public string GetValue(string propertyName) { string value = ""; try { if (!string.IsNullOrEmpty(propertyName)) { var objectValue = this.GetType().GetProperty(propertyName).GetValue(this, null); if (objectValue != null) { value = objectValue.ToString(); } } } catch (Exception) { } return value; } /// <summary> /// 根據屬性獲取描述值 /// </summary> /// <param name="propertyName"></param> /// <returns></returns> public string GetDescription(string propertyName) { try { PropertyInfo item = this.GetType().GetProperty(propertyName); string des = ((DescriptionAttribute)Attribute.GetCustomAttribute(item, typeof(DescriptionAttribute))).Description;// 屬性值 return des; } catch (Exception) { return ""; } } }
2:實體類
public class PurchaseContract : ExportBase { /// <summary> /// 甲方 /// </summary> public string PartyA { get; set; } /// <summary> /// 乙方 /// </summary> public string PartyB { get; set; } /// <summary> /// 合同編號 /// </summary> public string ContractNo { get; set; } /// <summary> /// 簽訂地點 /// </summary> public string ContractedAddress { get; set; } /// <summary> /// 簽訂時間 /// </summary> public string ContractedTime { get; set; } /// <summary> /// 甲方地址 /// </summary> public string AddressA { get; set; } /// <summary> /// 乙方地址 /// </summary> public string AddressB { get; set; } /// <summary> /// 甲方聯系電話 /// </summary> public string PartyAPhone { get; set; } /// <summary> /// 乙方聯系電話 /// </summary> public string PartyBPhone { get; set; } /// <summary> /// 甲方開戶行 /// </summary> public string PartyABankName { get; set; } /// <summary> /// 乙方開戶行 /// </summary> public string PartyBBankName { get; set; } /// <summary> /// 甲方開戶行賬戶 /// </summary> public string PartyABankAccount { get; set; } /// <summary> /// 乙方開戶行賬戶 /// </summary> public string PartyBBankAccount { get; set; } } public class PurchaseContractDetaile : ExportBase { /// <summary> /// 采購單號 /// </summary> public string 采購單號 { get; set; } /// <summary> /// 產品名稱 /// </summary> public string 品名 { get; set; } /// <summary> /// SKU /// </summary> public string SKU { get; set; } /// <summary> /// 產品描述 /// </summary> public string 產品描述 { get; set; } /// <summary> /// 單位 /// </summary> public string 單位 { get; set; } /// <summary> /// 數量 /// </summary> public int 數量 { get; set; } /// <summary> /// 單價 /// </summary> public decimal? 單價 { get; set; } /// <summary> /// 采購成本 /// </summary> public decimal? 采購成本 { get; set; } /// <summary> /// 金額 /// </summary> public decimal? 金額 { get; set; } /// <summary> /// 稅額 /// </summary> public decimal? 稅金 { get; set; } /// <summary> /// 價稅合計 /// </summary> public decimal? 價稅合計 { get; set; } public void SetTaxValue(bool IsTax) { try { if (單價.HasValue) { 單價 = Math.Round(單價.Value, 2); } if (金額.HasValue) { 金額 = Math.Round(金額.Value, 2); } } catch (Exception) { } } }
3:替換模板
public static class SpireWord { static Document document = new Document(); /// <summary> /// 獲取模板 /// </summary> public static void GetDocument() { try { string wordTemplatePath = AppDomain.CurrentDomain.BaseDirectory + "\\TemplateExport\\ContractTemplate.docx"; document.LoadFromFile(wordTemplatePath); } catch (Exception ex) { string errorMsg = ex.Message; throw; } } public static void CreateNewWord() { document.SaveToFile("Replace.docx", FileFormat.Docx); } /// <summary> /// 替換模板 /// </summary> /// <param name="purchaseContract"></param> public static void ReplaseTemplateWord(PurchaseContract purchaseContract) { try { foreach (System.Reflection.PropertyInfo p in purchaseContract.GetType().GetProperties()) { Console.WriteLine("Name:{0} Value:{1}", p.Name, p.GetValue(purchaseContract)); document.Replace(p.Name, p.GetValue(purchaseContract).ToString(), false, true); } } catch (Exception ex) { string msg = ex.Message; throw; } } public static void AddTable(List<PurchaseContractDetaile> purchaseOrderDetaileList) { try { Table table = document.Sections[0].Tables[0] as Table; int rowNum = purchaseOrderDetaileList.Count; DataTable dataTable = new DataTable(); int i = 1; foreach (var item in purchaseOrderDetaileList) { table.AddRow(10); if (i < table.Rows.Count) { table[i, 0].AddParagraph().AppendText(item.采購單號); table[i, 1].AddParagraph().AppendText(item.品名); table[i, 2].AddParagraph().AppendText(item.SKU); table[i, 3].AddParagraph().AppendText(item.產品描述); table[i, 4].AddParagraph().AppendText(item.單位); table[i, 5].AddParagraph().AppendText(item.數量.ToString()); table[i, 6].AddParagraph().AppendText(item.單價.ToString()); table[i, 7].AddParagraph().AppendText(item.采購成本.ToString()); table[i, 8].AddParagraph().AppendText(item.稅金.ToString()); table[i, 9].AddParagraph().AppendText(item.價稅合計.ToString()); } i++; } table.AddRow(10); table[i, 0].AddParagraph().AppendText("合計(大寫):" + Common.ConvertToChineseRMB(2386.20M)); table.ApplyHorizontalMerge(i, 0, 8); table[i, 9].AddParagraph().AppendText("2386.20"); } catch (Exception ex) { string errorMsg = ex.Message; throw; } } }
4:模板文件