zoukankan      html  css  js  c++  java
  • C#操作Excel(创建、打开、读写、保存)几种方法的总结

    C#操作Excel(创建、打开、读写、保存)几种方法的总结

    在.NET开发中,不管是web程序还是桌面软件(尤其是涉及数据库操作的MIS系统等),常常需操作Excel,如导出数据到Excel,读取Excel中数据到程序中等。总结起来,其操作不外乎创建、打开、读写、保存(后退出/释放),而其操作方法,则主要有:通过ADO.NET数据连接方式通过Excel对象模型“自动化”操作使用中间数据格式如文本文件,XML等间接操作Excel使用第三方控件(主要用于向Excel传输数据)等。

    在开始讨论之前,先把相关的一些网上资源罗列一下,其中大部分来自MSDN:

    MSDN: 如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据
    http://support.microsoft.com/kb/306023/zh-cn

    MSDN: 从 .NET 开发人员的角度理解 Excel 对象模型
    http://msdn.microsoft.com/zh-cn/library/aa168292(office.11).aspx

    如何:使用 COM Interop 创建 Excel 电子表格(C# 编程指南)
    http://msdn.microsoft.com/zh-cn/library/ms173186(VS.80).aspx

    Office XP 主互操作程序集入门
    http://msdn.microsoft.com/zh-cn/library/aa201322(office.11).aspx

    如何通过 Visual C# 使 Excel 自动执行操作以使用数组来填充或获取某区域中的数据
    http://support.microsoft.com/kb/302096/zh-cn

    如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化
    http://support.microsoft.com/kb/302084/zh-cn

    如何使用 Visual C# .NET 处理 Excel 事件
    http://support.microsoft.com/kb/823981/zh-cn

    C#中创建、打开、读取、写入、保存Excel的一般性代码
    http://hi.baidu.com/zhaochenbo/blog/item/f6d70ff7bf32fa2a730eec39.html

    如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
    http://support.microsoft.com/kb/306572/zh-cn

    在 Visual C#.NET 中使用 GetOleDbSchemaTable 从 Excel 如何: 检索元数据
    http://support.microsoft.com/kb/318452/zh-cn

    与 XML 一起使用 Visual Basic 和 ASP 生成 Excel 2003 工作簿
    http://msdn.microsoft.com/zh-cn/library/aa203722(office.11).aspx


    下面开始就各种方法逐步说明其具体的Excel操作过程:


    1.通过ADO.NET数据库连接方式

    Microsoft Jet 提供程序用于连接到 Excel 工作簿。在以下连接字符串中,Extended Properties 关键字设置 Excel 特定的属性。“HDR=Yes;”指示第一行中包含列名,而不是数据,“IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。Excel 8.0 针对Excel2000及以上版本,Excel5.0 针对Excel97。

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""

    注意,Extended Properties 所需的双引号必须还要加双引号。

    使用ADO.NET打开、读取并关闭代码示例如下:

    using System.Data.OleDb;
    using System.Data;

    String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source=c:/test.xls;" +
    "Extended Properties=Excel 8.0;";
    OleDbConnection objConn = new OleDbConnection(sConnectionString);
    objConn.Open();
    OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM [sheet1]", objConn);
    OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
    objAdapter1.SelectCommand = objCmdSelect;
    DataSet objDataset1 = new DataSet();
    //将Excel中数据填充到数据集
    objAdapter1.Fill(objDataset1, "XLData");
    objConn.Close();

    从上面可以看出,使用ADO.NET可将Excel当作普通数据库,使用SQL语句来操作。

    通过ADO.NET获取Excel文件的各Sheet名称,可使用元数据方式:

    String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source=c:/test.xls;" +
    "Extended Properties=Excel 8.0;";
    OleDbConnection cn = new OleDbConnection(sConnectionString);
    cn.Open();
    DataTable tb = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    foreach (DataRow row in tb.Rows)
    {
    //遍历弹出各Sheet的名称
    MessageBox.Show(row["TABLE_NAME"]);
    }

    关于使用ADO.NET创建并写入Excel文件与普通数据库操作极为类似,参见以下代码:

    String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source=c:/test.xls;" +
    "Extended Properties=Excel 8.0;";
    OleDbConnection cn = new OleDbConnection(sConnectionString);
    string sqlCreate = "CREATE TABLE TestSheet ([ID] INTEGER,[Username] VarChar,[UserPwd] VarChar)";
    OleDbCommand cmd = new OleDbCommand(sqlCreate, cn);
    //创建Excel文件:C:/test.xls
    cn.Open();
    //创建TestSheet工作表
    cmd.ExecuteNonQuery();
    //添加数据
    cmd.CommandText = "INSERT INTO TestSheet VALUES(1,'elmer','password')";
    cmd.ExecuteNonQuery();
    //关闭连接
    cn.Close();

    关于SQL语句中用到的数据类型,请查看System.Data.OleDb.OleDbType 枚举。

    至此,使用ADO.NET打开、创建、读取、写入、保存并退出已全部实现,总结起来,与数据库操作基本无异,很简单。
    这种方式的好处就是通用性强,将Excel中内容看作数据表,读取操作简单可靠,适合内容规范的Excel表格的数据读取。缺点是当Excel结构复杂,如含合并单元等时,无法正确读取,甚至出现不可预知的异常。

    2.通过Excel对象模型的“自动化”操作


    3.
    通过中间数据格式间接操作


    4.使用第三方控件

    做个快乐的自己。
  • 相关阅读:
    Dev XtraTreeList 学习
    DataGridView单元格显示GIF图片
    如何在.NET上处理二维码
    设计模式之UML类图的常见关系(一)
    .NET常用操作小知识
    Sql Server 存储过程使用技巧
    WinForm中如何判断关闭事件来源于用户点击右上角的“关闭”按钮
    WinFrom 安装包制作
    DBHelper数据库操作类(二)
    spring cloud zipkin
  • 原文地址:https://www.cnblogs.com/Jessy/p/2265071.html
Copyright © 2011-2022 走看看