zoukankan      html  css  js  c++  java
  • 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.使用第三方控件

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/qiernonstop/p/3699217.html
Copyright © 2011-2022 走看看