由于要為某軟件實現導出Excel功能,故有此文。
本文的開發環境是Visual Studio 2010 ,C#, Excel 2007。
新建C#工程后打開Solution Explorer,可以看到如下圖片:

右鍵點擊Reference->Add References->Browse
選擇三個DLL文件(點此下載):
Interop.Excel.dll
Interop.Microsoft.Office.Core.dll
Interop.VBIDE.dll
添加上述三個引用后,Reference標簽里的內容如下:
可以看到已經引用了剛才添加的三個DLL文件。OK,下面可以開始寫代碼了。
首先,在Form1.cs中添加Excel命名空間
1.新建一個Excel文檔并向其中寫入內容
下面,為Form1添加Load消息響應函數,添加方法如下所示:
對應的Office_test1_Load函數如下:
- PRivate Excel.application m_excel;
-
- private void Office_test1_Load(object sender, EventArgs e)
- {
-
- m_excel = new Excel.Application();
- m_excel.Application.Workbooks.Add(true);
-
- int col;
- for (col = 0; col < 10; col++)
- {
- m_excel.Cells[1, col + 1] = col;
- }
-
- m_excel.Visible = true;
- }
編譯,運行,得到如下效果:
通過上圖可以看到一個新的Excel文檔被創建了。下面我們再來看看如何打開一個已有的Excel文檔。
2.打開一個已有Excel文檔并讀取其中內容
在讀取Excel文檔之前,先來觀察一下待讀取的文檔。
如圖所示,第一行為標題,第二行為數據。此外,留意一下第一列的內容類型為:”日期“,第三列類型為:”數值“
按照常理,首先添加一個打開按鈕,對應OnOpen()監聽器。
類成員定義:
- private Excel.Application m_excel;
- private Excel.Workbook m_workbook;
此外,在Onload函數中要實例化m_excel。
- private void OnOpen(object sender, EventArgs e)
- {
- m_workbook = m_excel.Workbooks.Open(
- "C://Users//David_ss//Desktop//項目管理//項目經費收入簡表.xlsx",
- Type.Missing, Type.Missing, Type.Missing, Type.Missing,
- Type.Missing, Type.Missing, Type.Missing, Type.Missing,
- Type.Missing, Type.Missing, Type.Missing, Type.Missing,
- Type.Missing, Type.Missing);
-
- m_excel.Visible = true;
- }
下面,我們要進行文檔的讀取了。
為了顯示內容,我新添了幾個控件:如下圖所示
然后我們完成 ”顯示值“按鈕對應的消息響應函數 OnShowValue()
- private void OnShowValue(object sender, EventArgs e)
- {
- Range rng;
- object obj;
- String str;
- rng = (Excel.Range)m_excel.Cells[2, 1];
- obj = rng.Value2;
- System.Diagnostics.Debug.WriteLine(obj.ToString());
- str = rng.NumberFormatLocal;
- System.Diagnostics.Debug.WriteLine(str);
- this.date_ctrl.Value = DateTime.FromOADate(double.Parse(obj.ToString()));
-
- rng = (Excel.Range)m_excel.Cells[2, 2];
- obj = rng.Value2;
- System.Diagnostics.Debug.WriteLine(obj.ToString());
- str = rng.NumberFormatLocal;
- System.Diagnostics.Debug.WriteLine(str);
- this.serialnumber_ctrl.Text = obj.ToString();
-
- rng = (Excel.Range)m_excel.Cells[2, 3];
- obj = rng.Value2;
- System.Diagnostics.Debug.WriteLine(obj.ToString());
- str = rng.NumberFormatLocal;
- System.Diagnostics.Debug.WriteLine(str);
- this.money_ctrl.Text = obj.ToString();
-
- rng = (Excel.Range)m_excel.Cells[2, 4];
- obj = rng.Value2;
- System.Diagnostics.Debug.WriteLine(obj.ToString());
- str = rng.NumberFormatLocal;
- System.Diagnostics.Debug.WriteLine(str);
- this.manager_ctrl.Text = obj.ToString();
-
- }
上面代碼分別對應4個控件的數據顯示。
下面是顯示的結果:
此外,上面的代碼中,我還輸出了調試信息,即每個單元格的數據類型:
- str = rng.NumberFormatLocal;
- System.Diagnostics.Debug.WriteLine(str);
調試輸出結果:
通過上述結果可以看出:日期格式是日期對應的是一個數字字符串。所以代碼中使用的是DateTime的FromOADate方法解析日期。
日期的格式為:yyyy/m/d。
一般的單元格類型是:G/通用格式
數值格式為:0.00_);[紅色](0.00)。
-------------------------------------------------------華麗分割-------------------------------------------
若想要了解更多,首先請學習一下Excel的對象模型,可以參考上一篇文章:
當然,也可以下載對應的文檔:C#操作Excel2007&Excel對象模型.pdf