您的位置:首页 > 编程语言 > C#

转 C#操作Excel(2)-- 打开-读取Excel文档

2014-01-13 15:07 976 查看
本文的开发环境是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函数如下:

[csharp] view
plaincopy

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()监听器。

类成员定义:

[csharp] view
plaincopy

private Excel.Application      m_excel;  

private Excel.Workbook         m_workbook;   

此外,在Onload函数中要实例化m_excel。

[csharp] view
plaincopy

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

[csharp] view
plaincopy

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个控件的数据显示。

下面是显示的结果:



此外,上面的代码中,我还输出了调试信息,即每个单元格的数据类型:

[csharp] view
plaincopy

str = rng.NumberFormatLocal;  

System.Diagnostics.Debug.WriteLine(str);  

调试输出结果:



通过上述结果可以看出:日期格式是日期对应的是一个数字字符串。所以代码中使用的是DateTime的FromOADate方法解析日期。

日期的格式为:yyyy/m/d。

一般的单元格类型是:G/通用格式

数值格式为:0.00_);[红色](0.00)。

-------------------------------------------------------华丽分割-------------------------------------------

若想要了解更多,首先请学习一下Excel的对象模型,可以参考上一篇文章:

Excel对象模型:http://blog.csdn.net/ruby97/article/details/7412197

当然,也可以下载对应的文档:C#操作Excel2007&Excel对象模型.pdf

转自:http://blog.csdn.net/ruby97/article/details/7400016
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  2010 C#