一、簡介
要將資料寫入 EXCEL 檔案有許多的方法,但假如電腦不想安裝 Microsoft Office EXCEL,又想要寫入資料到 EXCEL,可以使用 NPOI、OpenXML SDK、OpenOffice.org SDK 等方式。本文透過簡單的範例 - 寫入資料到 EXCEL 讓大家初步了解如何使用這些 Library。
附註 : 本文程式為 Windows Forms (.NET Framework 3.5 專案),開發環境為 Windows XP SP3、Visual Studio 2008 SP1。
二、NPOI
NPOI 是可在 .NET 上的處理 Office 檔案的函式庫,由於 NPOI 相當熱門,因此不多加介紹,有興趣的可以參考小朱的文章 在 Server 端存取 Excel 檔案的利器:NPOI Library,而在使用上能讀寫 xls 檔案。接著介紹如何使用 NPOI 寫入資料到 EXCEL (xls) 檔案。
1. NOPI 下載與加入參考
(1) 到 CodePlex 的 NPOI 網站中下載 NPOI Lirary,在此下載的是 NPOI 1.2.2 for .NET 2.0,下載並且壓縮後,會有 7 個 dll 檔案,分別是
- NPOI.dll:NPOI 核心函式庫。
- NPOI.DDF.dll:NPOI 繪圖區讀寫函式庫。
- NPOI.HPSF.dll:NPOI 文件摘要資訊讀寫函式庫。
- NPOI.HSSF.dll:NPOI Excel BIFF 檔案讀寫函式庫。
- NPOI.Util.dll:NPOI 工具函式庫。
- NPOI.POIFS.dll:NPOI OLE 格式存取函式庫。
- ICSharpCode.SharpZipLib.dll:檔案壓縮函式庫。
(2) 解壓縮後,將 NPOI 的 dll 加入參考中。
2. 程式撰寫
請參考以下程式碼與註解,了解如何透過 NPOI 寫入資料到 Excel 檔案,以下程式為建立工作簿、工作表、寫入資料、儲存檔案。
02 |
using System.Collections.Generic; |
03 |
using System.ComponentModel; |
08 |
using System.Windows.Forms; |
13 |
using NPOI.HSSF.UserModel; |
15 |
using NPOI.POIFS.FileSystem; |
20 |
public partial class Form1 : Form |
24 |
InitializeComponent(); |
27 |
private void btnNPOI_Click( object sender, EventArgs e) |
30 |
HSSFWorkbook hssfworkbook = new HSSFWorkbook(); |
33 |
HSSFSheet sheet1 = hssfworkbook.CreateSheet( "Sheet1" ); |
36 |
sheet1.CreateRow(1).CreateCell(1).SetCellValue( "點部落" ); |
37 |
sheet1.CreateRow(2).CreateCell(1).SetCellValue( "小歐ou" ); |
40 |
FileStream file = new FileStream( @"C:\NPOI.xls" , FileMode.Create); |
41 |
hssfworkbook.Write(file); |
3. 執行結果
三、OpenXML SDK
Open XML SDK 是微軟所提供可以用來處理 Office 檔案,但只限 Open XML 檔案格式 (以 Excel 來說副檔名為 xlsx)。
目前 Open XML Format SDK 有以下版本
- Open XML Format SDK 1.0
- Open XML Format SDK 2.0
接著介紹如何使用 OpenXML SDK 寫入資料到 EXCEL (xlsx) 檔案。
1. OpenXML SDK 下載與加入參考
(1) 連結到 Open XML Format SDK 2.0 進行下載
(2) 執行 OpenXMLSDKv2.msi 進行安裝,安裝過程並沒有特別的過程,只是要記得安裝路徑在哪,免得找不到 dll。
(3) 將 DocumentFormat.OpenXml.dll、WindowsBase.dll 加入參考
DocumentFormat.OpenXml.dll 位置在 C:\Program Files\Open XML SDK\V2.0\lib\DocumentFormat.OpenXml.dll
2. 程式撰寫
參考程式碼與註解說明,程式流程如下
(1) 開啟 Excel 檔案,取得工作簿
(2) 取得工作簿中的工作表,並透過 Linq 判斷工作表是否存在
(3) 建立 Cell 物件,設定寫入位置,格式,資料
(4) 建立 Row 物件,將 Cell 加入
(5) 將 Row 加入工作表中
(6) 儲存檔案
02 |
using System.Collections.Generic; |
03 |
using System.ComponentModel; |
08 |
using System.Windows.Forms; |
11 |
using DocumentFormat.OpenXml.Packaging; |
12 |
using DocumentFormat.OpenXml.Spreadsheet; |
13 |
using DocumentFormat.OpenXml; |
14 |
#endregion OpenXML SDK |
16 |
namespace WinFormOpenXML |
18 |
public partial class Form1 : Form |
22 |
InitializeComponent(); |
25 |
private void btnOpenXML_Click( object sender, EventArgs e) |
28 |
using (SpreadsheetDocument document = SpreadsheetDocument.Open( @"C:\OpenXML.xlsx" , true )) |
30 |
WorkbookPart wbPart = document.WorkbookPart; |
33 |
Sheet theSheet = wbPart.Workbook.Descendants<Sheet>(). |
34 |
Where(s => s.Name == "工作表1" ).FirstOrDefault(); |
38 |
Cell cell = new Cell() { CellReference = "A1" }; |
39 |
cell.DataType = new EnumValue<CellValues>(CellValues.String); |
40 |
cell.CellValue = new CellValue(); |
41 |
cell.CellValue.Text = "點部落" ; |
44 |
Row theRow = new Row(); |
45 |
theRow.InsertAt(cell, 0); |
48 |
Worksheet ws = ((WorksheetPart)(wbPart.GetPartById(theSheet.Id))).Worksheet; |
49 |
SheetData sheetData = ws.GetFirstChild<SheetData>(); |
50 |
sheetData.Append(theRow); |