雖然也可以使用csv檔案格式,但是觀看的時候,沒辦法直接用Excel開啟,用記事本打開又不漂亮。
過去微軟沒有直接提供調用Excel函式的功能,不過在.NET時代,微軟總算整合進去了。
下面將要介紹簡單的Excel操作方法,包括開檔、存檔,以及填入表格的功能。
範例是利用WinForm去選擇欄位,並填入資料,最後會再存成一個xlsx檔案(Excel 2007格式)。
- 要使用Excel,需要先引入Excel的DLL檔案(Microsoft.Office.Interop.Excel)
VS.NET2008有兩個DLL檔,11.0版為Excel 2003;12.0版為Excel 2007的。
- Excel的架構是活頁簿(Excel的檔案)、工作表(一個檔案可以有多個工作表Sheet)、欄位(由欄、列來組成)。
因此,使用上需要幾個類別實體來操作:
(A) Application
(B) Workbook - 操作活頁簿
(C) Worksheet - 操作工作表
(D) Range - 操作欄位(可以為某個矩形範圍,如 A3-C5
using Microsoft.Office.Interop.Excel; //引用Excel Application類別 _Application myExcel = null; //引用活頁簿類別 _Workbook myBook = null; //引用工作表類別 _Worksheet mySheet = null;
- 首先,在範例裡面,我在載入WinForm後,將Excel的實體初始化。動作上就如前面說的,依序把Application, 活頁簿, 工作表初始化,並且設定焦點。
private void InitExcel() { //開啟一個新的應用程式 myExcel = new Microsoft.Office.Interop.Excel.Application(); //加入新的活頁簿 myExcel.Workbooks.Add(true); //停用警告訊息 myExcel.DisplayAlerts = false; //讓Excel文件可見 myExcel.Visible = true; //引用第一個活頁簿 myBook = myExcel.Workbooks[1]; //設定活頁簿焦點 myBook.Activate(); //引用第一個工作表 mySheet = (_Worksheet)myBook.Worksheets[1]; //命名工作表的名稱為 "Array" mySheet.Name = "測試"; //設工作表焦點 mySheet.Activate(); }
- 需要設定欄位資料的時候,再調用Range來做事。
範例中,是利用兩個Textbox來選定欄位(.get_Range),再利用第三個Textbox來給定值(.Value2)。
private void buttonSet_Click(object sender, EventArgs e) { string col = (string)comboBoxCol.SelectedItem; string row = (string)comboBoxRow.SelectedItem; Range myRange = null; myRange = mySheet.get_Range(col + row, Type.Missing); myRange.Value2 = textBoxData.Text; }
- 最後,在程式終了時,將Excel存檔(.SaveAs),並釋放資源。
private void button1_Click(object sender, EventArgs e) { //另存活頁簿 myBook.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); //關閉活頁簿 myBook.Close(false, Type.Missing, Type.Missing); //關閉Excel myExcel.Quit(); //釋放Excel資源 System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel); myBook = null; mySheet = null; myExcel = null; GC.Collect(); }
範例程式畫面如下:

範例程式下載:Excel範例程式