zoukankan      html  css  js  c++  java
  • 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
    1. using Excel;  

    1.新建一个Excel文档并向其中写入内容

    下面,为Form1添加Load消息响应函数,添加方法如下所示:

    对应的Office_test1_Load函数如下:

    [csharp] view plaincopy
    1. private Excel.Application      m_excel;  
    2.   
    3. private void Office_test1_Load(object sender, EventArgs e)  
    4.         {  
    5.               
    6.             m_excel     =   new     Excel.Application();              
    7.             m_excel.Application.Workbooks.Add(true);  
    8.   
    9.             int col;  
    10.             for (col = 0; col < 10; col++)  
    11.             {  
    12.                 m_excel.Cells[1, col + 1] = col;  
    13.             }  
    14.             //显示Excel内容  
    15.             m_excel.Visible = true;  
    16.         }  


    编译,运行,得到如下效果:

    通过上图可以看到一个新的Excel文档被创建了。下面我们再来看看如何打开一个已有的Excel文档。

    2.打开一个已有Excel文档并读取其中内容

    在读取Excel文档之前,先来观察一下待读取的文档。

    如图所示,第一行为标题,第二行为数据。此外,留意一下第一列的内容类型为:”日期“,第三列类型为:”数值“

    按照常理,首先添加一个打开按钮,对应OnOpen()监听器。

    类成员定义:

    [csharp] view plaincopy
    1. private Excel.Application      m_excel;  
    2. private Excel.Workbook         m_workbook;   


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

    [csharp] view plaincopy
    1. private void OnOpen(object sender, EventArgs e)  
    2.         {  
    3.             m_workbook = m_excel.Workbooks.Open(  
    4.                  "C:\Users\David_ss\Desktop\项目管理\项目经费收入简表.xlsx",  
    5.                 Type.Missing, Type.Missing, Type.Missing, Type.Missing,  
    6.                 Type.Missing, Type.Missing, Type.Missing, Type.Missing,  
    7.                 Type.Missing, Type.Missing, Type.Missing, Type.Missing,  
    8.                 Type.Missing, Type.Missing);  
    9.   
    10.             m_excel.Visible = true;  
    11.         }  

    下面,我们要进行文档的读取了。

    为了显示内容,我新添了几个控件:如下图所示

    然后我们完成 ”显示值“按钮对应的消息响应函数 OnShowValue()

    [csharp] view plaincopy
    1. private void OnShowValue(object sender, EventArgs e)  
    2.     {  
    3.         Range rng;  
    4.         object obj;  
    5.         String str;  
    6.         rng = (Excel.Range)m_excel.Cells[2, 1];  
    7.         obj = rng.Value2;  
    8.         System.Diagnostics.Debug.WriteLine(obj.ToString());  
    9.         str = rng.NumberFormatLocal;  
    10.         System.Diagnostics.Debug.WriteLine(str);  
    11.         this.date_ctrl.Value = DateTime.FromOADate(double.Parse(obj.ToString()));  
    12.   
    13.         rng = (Excel.Range)m_excel.Cells[2, 2];  
    14.         obj = rng.Value2;  
    15.         System.Diagnostics.Debug.WriteLine(obj.ToString());  
    16.         str = rng.NumberFormatLocal;  
    17.         System.Diagnostics.Debug.WriteLine(str);  
    18.         this.serialnumber_ctrl.Text = obj.ToString();  
    19.   
    20.         rng = (Excel.Range)m_excel.Cells[2, 3];  
    21.         obj = rng.Value2;  
    22.         System.Diagnostics.Debug.WriteLine(obj.ToString());  
    23.         str = rng.NumberFormatLocal;  
    24.         System.Diagnostics.Debug.WriteLine(str);  
    25.         this.money_ctrl.Text = obj.ToString();  
    26.   
    27.         rng = (Excel.Range)m_excel.Cells[2, 4];  
    28.         obj = rng.Value2;  
    29.         System.Diagnostics.Debug.WriteLine(obj.ToString());  
    30.         str = rng.NumberFormatLocal;  
    31.         System.Diagnostics.Debug.WriteLine(str);  
    32.         this.manager_ctrl.Text = obj.ToString();  
    33.   
    34.     }  


    上面代码分别对应4个控件的数据显示。

    下面是显示的结果:

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

    [csharp] view plaincopy
    1. str = rng.NumberFormatLocal;  
    2. System.Diagnostics.Debug.WriteLine(str);  

    调试输出结果:

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

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

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

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

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

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

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

  • 相关阅读:
    设计模式 5 —— 工厂模式
    Java 集合系列 14 hashCode
    Java 集合系列 13 WeakHashMap
    java 多线程——quartz 定时调度的例子
    memcached 学习 1—— memcached+spring配置
    vivado SDK之找不到"platform.h"
    ubuntu上第一个hello程序
    FPGA设计中的异步复位、同步释放思想
    异步fifo的Verilog实现
    zedboard上首个驱动实践——Led
  • 原文地址:https://www.cnblogs.com/gc2013/p/3934960.html
Copyright © 2011-2022 走看看