• 使用OLE DB读写Excel


    说明:

    使用这种技术的好处是无需引用对象,坏处是无法处理类似合并单元格这样的复杂情况

    一些更新:

    为了使用Office 2010,需要安装Microsoft Access 2010 数据库引擎可再发行程序包

    https://www.microsoft.com/zh-CN/download/details.aspx?id=13255

    如果您是使用 OLEDB 的应用程序开发人员,请将 ConnectionString 属性的 Provider 参数设置为“Microsoft.ACE.OLEDB.12.0”。 

    如果要连接到 Microsoft Office Excel 数据,请根据 Excel 文件类型添加相应的 OLEDB 连接字符串扩展属性: 

    文件类型(扩展名)                                             扩展属性
    ---------------------------------------------------------------------------------------------
    Excel 97-2003 工作簿 (.xls)                                  “Excel 8.0”
    Excel 2007-2010 工作簿 (.xlsx)                             “Excel 12.0 Xml”
    启用宏的 Excel 2007-2010 工作簿 (.xlsm)     “Excel 12.0 宏”
    Excel 2007-2010 非 XML 二进制工作簿 (.xlsb)     “Excel 12.0”

    低版本Excel看下面

    来自:http://blog.csdn.net/hlzyly/article/details/5710644

    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结构复杂,如含合并单元等时,无法正确读取,甚至出现不可预知的异常。

  • 相关阅读:
    关于医保卡的正确使用
    mysql rpm安装,以及修改charset
    hql小经验
    工资构成
    distinct 与order by 一起用
    服务器设置浏览器的文档模式
    项目管理
    show processlist 各个状态说明
    sql 查询优化
    定时器备份数据库
  • 原文地址:https://www.cnblogs.com/s5689412/p/6220916.html
Copyright © 2020-2023  润新知