The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

介紹好用的 ExcelPackage 套件

之前我在寫 VSTO 的時候,真是痛苦死了,尤其用 C# 寫 VSTO 才真的是夢魘,不得已只好用 VB.NET 寫 VSTO 的應用。主要的痛苦點在於我必須先去 Excel 錄製 VBA 然後再將程式碼轉成 VB.NET 的格式,過程中有許多物件名稱與用法不太一樣,導致一直在查資料,開發的效率很差。

現在 Office 2007 因為採用了 Open XML 檔案格式,所有的 Office 文件都變成 XML 了,意思也就是說我們日後處理 Office 文件時就可以用更 Smart 的方式做了。

不過並非因為這樣我們就不用學 VSTO 2008,而是簡單的文件處理不再需要使用 VSTO 開發了,有個 ExcelPackage 套件已經開發出來了,今天的版本是 v1.0.0.1 版,此套件最主要的特色就是可以讀、寫 Excel 2007 的文件而不需要安裝 Office 2007 應用程式!ExcelPackage 主要是用到 .NET 3.0System.IO.Package 命名空間裡的類別處理 Open XML format 的檔案,所以才不需要安裝 Office 2007 但一定要安裝 .NET 3.0 才可以使用。

透過 ExcelPackage 你可以先將要產生的 Excel 檔將格式都先設計好,留下資料的部分透過 ExcelPackage 進行處理,一段 Code 可以省去我打一堆字,看 Code 吧:

[code:c#]
// 要寫入的 Excel 2007 文件
FileInfo newFile = new FileInfo(outputDir.FullName + @"\sample3.xlsx");

// 要讀入的 Excel 2007 文件範本
FileInfo template = new FileInfo(templateDir.FullName + @"\sample3template.xlsx");

if (!template.Exists) throw new Exception("Template file does not exist! i.e. sample3template.xlsx");

// 讀入 template 修改後直接寫入 newFile
using (ExcelPackage xlPackage = new ExcelPackage(newFile, template))
{
    // 取得 Sales 工作表
    ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets["Sales"];
   
    if (worksheet != null)
    {
        // 在 Sales 工作表的第 (1, 1) 儲存格寫入一個超連結
        string hyperlink = "mailto:" + "somebody" + "@domain.com";
        worksheet.Cell(1, 1).Hyperlink = new Uri(hyperlink, UriKind.Absolute);
    }

    // 設定文件屬性
    xlPackage.Workbook.Properties.Title = "範例 3";
    xlPackage.Workbook.Properties.Author = "John Tunnicliffe";
    xlPackage.Workbook.Properties.Subject = "ExcelPackage Samples";
    xlPackage.Workbook.Properties.Keywords = "Office Open XML";
    xlPackage.Workbook.Properties.Category = "ExcelPackage Samples";
    xlPackage.Workbook.Properties.Comments = "此範例展示如何建立 Excel 2007 檔案";

    // 設定文件擴充屬性
    xlPackage.Workbook.Properties.Company = "AdventureWorks Inc.";
    xlPackage.Workbook.Properties.HyperlinkBase
        = new Uri("http:/" + "/www.linkedin.com/pub/0/277/8a5");

    // 設定自訂的文件屬性 ( 你可以用在你自己的應用程式裡 )
    xlPackage.Workbook.Properties
        .SetCustomPropertyValue("Checked by", "John Tunnicliffe");
    xlPackage.Workbook.Properties
        .SetCustomPropertyValue("EmployeeID", "1147");
    xlPackage.Workbook.Properties
        .SetCustomPropertyValue("AssemblyName", "ExcelPackage");
   
    // 存檔,會直接寫入 newFile
    xlPackage.Save();
}
[/code]

這段 Code 是從下載的 ExcelPackage 中的 Sample Code 擷取出來的,我簡化過了,這樣比較好看,完整的 Sample 請到 ExcelPackage 網站下載。

另外還有個 WordPackage 還在開發中,我也正在期待這個套件的完成,相信對 Word 文件的處理也會有莫大的助益!