[Office][C#] NPOI、OpenXML SDK、OpenOffice.org SDK 寫入資料到 EXCEL 檔案

一、簡介

要將資料寫入 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 檔案,以下程式為建立工作簿、工作表、寫入資料、儲存檔案。

01 using System;
02 using System.Collections.Generic;
03 using System.ComponentModel;
04 using System.Data;
05 using System.Drawing;
06 using System.Linq;
07 using System.Text;
08 using System.Windows.Forms;
09  
10 using System.IO;
11  
12 #region NPOI
13 using NPOI.HSSF.UserModel;
14 using NPOI.HPSF;
15 using NPOI.POIFS.FileSystem;
16 #endregion NPOI
17  
18 namespace WinFormNPOI
19 {
20     public partial class Form1 : Form
21     {
22         public Form1()
23         {
24             InitializeComponent();
25         }
26  
27         private void btnNPOI_Click(object sender, EventArgs e)
28         {
29             // 建立新的 Excel 工作簿
30             HSSFWorkbook hssfworkbook = new HSSFWorkbook();
31  
32             // 在 Excel 工作簿中建立工作表,名稱為 Sheet1
33             HSSFSheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
34  
35             // 寫入資料到工作表中
36             sheet1.CreateRow(1).CreateCell(1).SetCellValue("點部落");
37             sheet1.CreateRow(2).CreateCell(1).SetCellValue("小歐ou");
38   
39             // 儲存檔案
40             FileStream file = new FileStream(@"C:\NPOI.xls", FileMode.Create);
41             hssfworkbook.Write(file);
42             file.Close();
43         }
44     }
45 }

 

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) 儲存檔案

01 using System;
02 using System.Collections.Generic;
03 using System.ComponentModel;
04 using System.Data;
05 using System.Drawing;
06 using System.Linq;
07 using System.Text;
08 using System.Windows.Forms;
09  
10 #region OpenXML SDK
11 using DocumentFormat.OpenXml.Packaging;
12 using DocumentFormat.OpenXml.Spreadsheet;
13 using DocumentFormat.OpenXml;
14 #endregion OpenXML SDK
15  
16 namespace WinFormOpenXML
17 {
18     public partial class Form1 : Form
19     {
20         public Form1()
21         {
22             InitializeComponent();
23         }
24  
25         private void btnOpenXML_Click(object sender, EventArgs e)
26         {
27             // 1. 開啟 Excel 檔案,取得工作簿
28             using (SpreadsheetDocument document = SpreadsheetDocument.Open(@"C:\OpenXML.xlsx"true))
29             {
30                 WorkbookPart wbPart = document.WorkbookPart;
31  
32                 // 2. 取得工作簿中的工作表,並透過 Linq 判斷工作表是否存在
33                 Sheet theSheet = wbPart.Workbook.Descendants<Sheet>().
34                   Where(s => s.Name == "工作表1").FirstOrDefault();
35                 if (theSheet != null)
36                 {
37                     // 3. 建立 Cell 物件,設定寫入位置,格式,資料
38                     Cell cell = new Cell() { CellReference = "A1" };
39                     cell.DataType = new EnumValue<CellValues>(CellValues.String);
40                     cell.CellValue = new CellValue();
41                     cell.CellValue.Text = "點部落";
42  
43                     // 4. 建立 Row 物件,將 Cell 加入
44                     Row theRow = new Row();
45                     theRow.InsertAt(cell, 0);
46  
47                     // 5. 將 Row 加入工作表中
48                     Worksheet ws = ((WorksheetPart)(wbPart.GetPartById(theSheet.Id))).Worksheet;
49                     SheetData sheetData = ws.GetFirstChild<SheetData>();
50                     sheetData.Append(theRow);
51  
52                     // 6. 儲存檔案
53                     ws.Save();
54                 }

你可能感兴趣的:(工作,Excel,C#,Microsoft,Office,OpenXml)