天天看點

C#操作Excel(2)-- 打開-讀取Excel文檔

由于要為某軟體實作導出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命名空間

[csharp] view plaincopy

using 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;  

            }  

            //顯示Excel内容  

            m_excel.Visible = true;  

        }  

編譯,運作,得到如下效果:

通過上圖可以看到一個新的Excel文檔被建立了。下面我們再來看看如何打開一個已有的Excel文檔。

2.打開一個已有Excel文檔并讀取其中内容

在讀取Excel文檔之前,先來觀察一下待讀取的文檔。

如圖所示,第一行為标題,第二行為資料。此外,留意一下第一列的内容類型為:”日期“,第三列類型為:”數值“

按照常理,首先添加一個打開按鈕,對應OnOpen()監聽器。

類成員定義:

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);  

下面,我們要進行文檔的讀取了。

為了顯示内容,我新添了幾個控件:如下圖所示

然後我們完成 ”顯示值“按鈕對應的消息響應函數 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];  

        this.serialnumber_ctrl.Text = obj.ToString();  

        rng = (Excel.Range)m_excel.Cells[2, 3];  

        this.money_ctrl.Text = obj.ToString();  

        rng = (Excel.Range)m_excel.Cells[2, 4];  

        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