Spire.Office组件使用例子
用.NET開發程序通常要涉及到對Office文件讀寫操作,比較常見的操作比如提取文本,導出Excel格式數據,動態生成word文檔,生成pdf文檔等。
實現這些功能通常需要在服務端安裝office軟件,然后通過調用com組件或者oledb的方式訪問數據,這是比較重的使用方式,畢竟需要在服務器上安裝一個office軟件。
相對比較輕量級的是使用OpenXML,需要遵循OpenXML文檔規范,動態生成對應格式的xml文件。OpenXML相對比較基礎,需要較深入的學習相關的API。
為了簡化相關功能開發,最近了解到一款提供給開發人員使用的Office編程組件——Spire.Office,其API接口有點類似于OpenXML,同樣也是不需要安裝office軟件,但是提供更加簡便的實現方式。
這個組件涵蓋了Office開發中涉及的大部分功能點,涵蓋了對Word、Excel、PPT、PDF等文件的讀寫、編輯、查看功能,同時也提供了條形碼生成和掃描的功能,整體功能比較完整,在office開發領域這塊看起來無所不能。
官方網站提供了非常詳細的文檔說明以及使用Demo,難得看到這么詳盡的API文檔介紹,非常用心的一款產品,詳情可點擊查看http://www.e-iceblue.com/Tutorials.html
引入方式
引入該組件的方式可以通過下載完整安裝包(http://www.e-iceblue.com/downloads/pack/spire.office_2.13.zip)或者通過nuget的方式引用。
個人比較偏向于使用nuget包,在nuget上搜索Spire會列出大概有22個結果,其中第一個package,Spire.Office for .NET是一個完整的組件包,包含了Spire.Office組件的所有功能,當然文件大小也是很大的。
后面的包是針對單個功能的,適用于只需要用到某個功能的情景。
使用例子
為了方便演示,這里直接引用了Spire.Office for .NET包,整體大小在88MB左右,下載packages有點慢
Install-Package Spire.Office
下面針對三個常用功能,學習如何使用Spire.Office組件。
一、文本提取
通常我們在做一些文檔索引或者文檔解析的時候,需要得到文檔的純文本內容,這樣便于對不同格式的文檔進行通用的處理。最常見的就是將文檔內容作為索引提交的搜索引擎,從而實現對不同格式文檔的搜索。
通過Spire.Office的Doc和Pdf組件能比較方便的抽取文檔的文本,需要用到以下兩個組件
Spire.Doc
Spire.Pdf
demo界面
抽取Word文檔
以下代碼是加載一個文件流,這個示例是讀取上傳的文件流,然后遍歷文檔的每個section,再遍歷每個section下的Paragraph,讀取里面的文本,得到最終的文檔文本內容。
using (var document = new Document(fileStream))
{
// 提取每個段落的文本
var sb = new StringBuilder();
foreach (Section section in document.Sections)
{
foreach (Paragraph paragraph in section.Paragraphs)
{
sb.AppendLine(paragraph.Text);
}
}
return sb.ToString();
}
下圖是用于提取的doc文檔以及提取后純文本內容
(word原文) (抽取后的原文)
抽取Pdf文檔
類似于Word文檔抽取,代碼直觀明了,加載文件流,然后遍歷每一頁,提取文本。
using (var document = new PdfDocument())
{
document.LoadFromStream(fileStream);
var sb = new StringBuilder();
foreach (PdfPageBase page in document.Pages)
{
sb.AppendLine(page.ExtractText());
}
return sb.ToString();
}
ExtractPdf
下圖是用于提取的pdf文檔以及提取后純文本內容
(pdf原文) (抽取后的文本)
二、導出Excel數據
導出Excel也是開發中經常遇到的爛大街功能,初期使用過response直接寫csv文件,之后用上了專業的組件比如NPOI,現在用Spire.Xls組件來看看效果如何。
demo界面,為了方便演示,直接讓用戶提交數據庫連接字符串和查詢語句,然后導出Excel文件
關鍵代碼
大概步驟就是,創建一個Workbook,然后將從數據庫得到的DataTable插入到shee中,幾行代碼比較便捷的得到包含數據的Excel文件
using (var book = new Workbook())
{
var sheet = book.Worksheets[0];
// 這里只是返回一個DataTable
DataTable dataTable = GetData(model.ConnectionString, model.SelectClause);
// 在第一行第一列插入數據表
sheet.InsertDataTable(dataTable, true, 1, 1);
sheet.Name = dataTable.TableName;
var ms = new MemoryStream();
book.SaveToStream(ms, FileFormat.Version97to2003);
ms.Position = 0;
return File(ms, "application/vnd.ms-excel", sheet.Name + ".xls");
}
ExportExcel
導出的文件效果
導出Excel文檔效果(基于[AdventureWorks2014].[Production].[Product]表)
由于用的是評估版,所以導出的Excel最后一個sheet是一些試用提示信息
三、生成文檔
文檔生成通常用于動態從數據庫讀取一些變化的數據,然后套用某個模板將數據填入,最終生成看起來一個有模有樣的文檔,通常是那種八股文。曾經做個簡歷導出,就是用的類似的方式,實現將同一份數據導出成不同的文檔格式。
這里使用Spire.Doc和Spire.Pdf兩大組件,實現創建word和pdf文檔的功能
demo界面,通過輸入文檔標題,文檔名,若干個文檔段落生成文檔
關鍵代碼
實現過程有點類似于文本抽取的逆向操作
創建Word文檔
依次設置標題以及各個段落的內容
using (var document = new Document())
{
Section section = document.AddSection();
var titleParagraph = section.AddParagraph();
titleParagraph.AppendText(model.Title);
titleParagraph.Format.HorizontalAlignment = HorizontalAlignment.Center;
foreach (var paragraph in model.Paragraphs)
{
Paragraph para = section.AddParagraph();
para.AppendText(paragraph);
}
var ms = new MemoryStream();
document.SaveToStream(ms, Spire.Doc.FileFormat.Docx);
ms.Position = 0;
return File(ms, "application/msword", model.FileName + ".docx");
}
CreateWord
生成文檔效果,由于是評估版,還是被硬生生的插入了一段提示,并且生成的word文檔不能編輯(付費后應該是可以編輯的)
創建Pdf文檔
創建過程類似于使用canvas畫板,生成一個簡單文檔還不算復雜
using (var document = new PdfDocument())
{
PdfPageBase page = document.Pages.Add();
var font = new PdfFont(PdfFontFamily.Helvetica, 13f);
var brush = PdfBrushes.Black;
var location = new PointF(20, 20);
page.Canvas.DrawString(model.Title, font, brush, location);
foreach (var paragraph in model.Paragraphs)
{
location.Y += 10;
page.Canvas.DrawString(paragraph, font, brush, location);
}
var ms = new MemoryStream();
document.SaveToStream(ms, Spire.Pdf.FileFormat.PDF);
ms.Position = 0;
return File(ms, "application/pdf", model.FileName + ".pdf");
}
CreatePdf
生成文檔效果,同樣也是毫無違和感的被插入了評估版的提示。這里看到使用的是英文內容,因為目前測試評估版輸入中文生成文檔會顯示為亂碼,還沒找到設置編碼的方式
完整代碼下載
小結
這個組件還是能覆蓋到我們日常開發涉及到調用Office的功能,基于這個組件的API還能做更多高級的文檔操作功能,實現對office文檔進行一些深度的開發時不成問題的。
免費版的目前也就僅僅夠體驗一下,付費后的功能會強大很多,但是付費版的性價比不是很高,具體收費可以到官網查看
總結
以上是生活随笔為你收集整理的Spire.Office组件使用例子的全部內容,希望文章能夠幫你解決所遇到的問題。