2021-01-08

c#操作Excel

Excel学习笔记

文章目录

  • c#操作Excel
  • 前言
  • 一、连接方式
    • 1、OLEDB
    • 2、com组件
  • 二、组成
    • 1. OLEDB成员
    • 2.COM组件
  • 三、连接Excel
  • 总结


前言

例如:之前在网上查询了很多关于访问Excel的资料都介绍少的比较笼统,所以在这里记录一下使用的两种方式进行对比分析

一、连接方式

1、OLEDB

OLEDB(Object Linking and Embedding,Database,又称为OLE DB或OLE-DB),一个基于COM的数据存储对象,能提供对所有类型的数据的操作,甚至能在离线的情况下存取数据(比方说,你使用的是你的便携机,你可以毫不费力地看到最后一次数据同步时的数据映像).

优点:读取Excel速度相对调用COM组件来讲是非常的快,不需要安装Office Excel就可以使用。
缺点:对于Excel本身一些复杂的逻辑,如单元格合并,单元格着色等无法支持。

2、com组件

优势:可以非常灵活的读取Excel中的数据,而且使用方式很丰富,基本上凡是打开Office Excel软件能够用鼠标点击完成的事,使用VSTO调用COM组件都能完成,而且可以调用Excel自身带的宏方法等。
缺点:机器上必须安装Excel,最重要的一点因为是基于单元格方式读取的,所以数据很慢。

二、组成

1. OLEDB成员

OLEDB标准中定义的新概念----OLEDB将传统的数据库系统划分为多个逻辑组件,这些组件之间相对独立又相互通信。这种组件模型中的各个部分被冠以不同的名称。例如:数据提供者(Data Provider)是指提供数据存储的软件组件,小到普通的文本文件、大到主机上的复杂数据库,或者电子邮件存储,都是数据提供者的例子。有的文档把这些软件组件的开发商也称为数据提供者。

  1. Data Providers 数据提供者
    凡是透过OLEDB将数据提供出来的,就是数据提供者。
    注意:对于新的Excel格式不能使用老的provider
    2003格式的可以使用Microsoft.JET.OLEDB.4.0或者Microsoft.Ace.OLEDB.12.0
    2007以后格式只能使用Microsoft.Ace.OLEDB.12.0
    扩展属性參数:
    Excel 8.0 对于Excel 97以上到2003版本号都用Excel 8.0,
    2007或2010的都用Extended Properties=Excel 12.0
  2. Data Consumers 数据使用者
    凡是使用OLEDB提供数据的程序或组件,都是OLEDB的数据使用者。
  3. HDR (HeaDer Row) 列标题字段
    HDR=NO 即无字段
    HDR=Yes 即有字段
  4. IMEX 是否强制转换为文本
    0 : is Export mode 输出模式
    1 : is Import mode 输入模式
    2 : is Linekde mode(full update capabilities) 链接模式(完全更新能力)

2.COM组件

  1. Application:应用程序
  2. Workbooks:工作薄
  3. Workbook
  4. Worksheets:工作单
  5. Worksheet

三、连接Excel

##1、OLEDB连接
读取Excel代码如下(示例):

 public static DataSet ExcelToDataSet(string path, string tableName = "table1")
        {
     
            DataSet ds = new DataSet();
            int lastIndex = path.LastIndexOf(".");
            string txtType = path.Substring(lastIndex, path.Length - lastIndex );
            string strConn;
            if (txtType == ".xls")
            {
     
             
                 strConn = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};Extended Properties=Excel 8.0 HDR=Yes;");
            }
            else
            {
     
                 strConn= $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};Extended Properties=Excel 12.0 HDR=No;";
            }
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            string strExcel = string.Format($"select * from [Sheet1$]");//自动获取第一个sheet1页名称必须添加$
            OleDbDataAdapter myAdapeter = new OleDbDataAdapter(strExcel, strConn);
            try
            {
     
                myAdapeter.Fill(ds, tableName);
            }
            catch (Exception ex)
            {
     
                throw new Exception(ex.ToString());
            }
            finally
            {
     
                conn.Close();
            }
            return ds;
        }

创建并Excel代码如下(示例):

 public static object DataSetToExcel(string path, string tableName = "table1")
        {
     
            string strConn;
            int lastIndex = path.LastIndexOf(".");
            string txtType = path.Substring(lastIndex, path.Length - lastIndex);
            if (txtType == ".xls")
            {
     
                strConn = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};Extended Properties='Excel 8.0;'";
            }
            else
            {
     
                strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0 xml'";
            }
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            using (OleDbCommand mcmd = conn.CreateCommand())
            {
     
                string mCeateTable = $"Create table {tableName} ([ID] varchar,[name] varchar ,[age] varchar)";
                mcmd.CommandText = mCeateTable;
                mcmd.ExecuteNonQuery();
                string code = $"insert into [{tableName}$] (ID,name,age)values('1','yantai','12')";
                mcmd.CommandText = code;
                mcmd.ExecuteNonQuery();
                conn.Close();
            }
            return true;

        }

链接: https://download.csdn.net/download/wanxiweilai/14045919.


## 2、COM组件连接 创建Excel并设定格式、代码如下:
   public static void CreateExcel(string path )
        {
                  
            app.SheetsInNewWorkbook = 3; 
            Workbook  book = app.Workbooks.Add();
            Worksheet sheet = book.Worksheets[1];
            sheet.Name = "hello";
            sheet.Cells[1, 2]="123";
            Range r = sheet.get_Range("a1", "b2"); 
            r.Merge(Missing.Value);
            r.Font.Bold = true;
            r.HorizontalAlignment =XlHAlign.xlHAlignCenter;
            r.VerticalAlignment = XlHAlign.xlHAlignCenter;
            Worksheet sheet1 = book.Worksheets[2];
            sheet1.Name = "world";
            sheet1.Cells[1, 2] = "123";
            sheet1.Rows[1].Font.UnderLine= true;
            book.SaveAs(path);
            book.Close();
            app.Quit();
        }

链接: https://download.csdn.net/download/wanxiweilai/14045919.


总结

以上内容就是今天学习的OLEDB的所有学习资料,通过以上操作可以对Excel进行一些简单的操作,总结的目的是防止以后遗忘在此记录一下。后期继续更新

你可能感兴趣的:(笔记)