zoukankan      html  css  js  c++  java
  • [zz]使用OleDb,将Excel导入DataSet

         本方法,将传入的Excel文件内所有的Sheet内的数据都填充入DataSet中。这是一个简单快捷的方法,不足之处是不适合带有格式复杂的Excel文件。(比如:有合并单元格的)

    1. public class ExcelUtil  
    2. {  
    3.     /// <summary>  
    4.     /// 从Excel文件导入DataSet  
    5.     /// Excel的连接字符串说明(详细参看 http://www.connectionstrings.com/excel ):  
    6.     /// HDR=Yes 表示第一行是表头,没有数据,读取时忽略第一行。设置为 No 时则从第一行读取。  
    7.     /// IMEX=1  表示告诉OleDb驱动,所有数据将作为字符串读取(numbers,dates等)  
    8.     /// 注意:有时候因为ISAM驱动没有安装,设置HDR和IMEX会出异常。去掉即可。  
    9.     /// </summary>  
    10.     /// <param name="fileName">Excel文件路径</param>  
    11.     /// <param name="firstRowIsHeader">第一行是否是表头</param>  
    12.     /// <returns>Excel数据,一个Sheet对应一个DataTable</returns>  
    13.     public static DataSet GetDataSetFromExcel(string fileName, string sheetName = "", bool firstRowIsHeader = true)  
    14.     {  
    15.         if (!System.IO.File.Exists(fileName))  
    16.             throw new ArgumentException("file is not exist!");  
    17.   
    18.         var ds = new DataSet();  
    19.         var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties=Excel 8.0;";  
    20.         //if (firstRowIsHeader)  
    21.         //    strConn += "HDR=Yes;";  
    22.         strConn = string.Format(strConn, fileName);  
    23.         using (var conn = new OleDbConnection(strConn))  
    24.         {  
    25.             conn.Open();  
    26.             DataTable excelSchema = null;  
    27.             string sql = "select * from [{0}]";  
    28.             var adapter = new OleDbDataAdapter();  
    29.             adapter.SelectCommand = conn.CreateCommand();  
    30.   
    31.             if (string.IsNullOrEmpty(sheetName))  
    32.             {  
    33.                 excelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,  
    34.                                    new object[] { null, null, null, "TABLE" });  
    35.                   
    36.                 foreach (DataRow row in excelSchema.Rows)  
    37.                 {  
    38.                     var sheet = row["TABLE_NAME"].ToString();  
    39.                     sql = string.Format(sql, sheet);  
    40.                     adapter.SelectCommand.CommandText = sql;  
    41.                     adapter.Fill(ds, sheet);  
    42.                 }  
    43.             }  
    44.             else  
    45.             {  
    46.                 sql = string.Format(sql, sheetName + "{1}quot;);  
    47.                 adapter.SelectCommand.CommandText = sql;  
    48.                 adapter.Fill(ds, sheetName);  
    49.             }  
    50.             conn.Close();  
    51.         }  
    52.         return ds;  
    53.     }  
    54.   
    55. }  

    上面代码中46行的 "quot;" 应为 "$"  

    Excel查询的时候,加上范围也可以。这样就能指定范围获得数据。比如: 
    (1) string sql = "select * from [{0}A:C]";
    (2) string sql = "select * from [{0}A1:C100]"; 

    使用: 

     
    1. private void btnExcel2Data_Click(object sender, EventArgs e)  
    2. {  
    3.     openFileDialog1.Filter = "Excel Files | *.xls";   
    4.     var ret = openFileDialog1.ShowDialog();  
    5.     if (ret == System.Windows.Forms.DialogResult.OK)  
    6.     {  
    7.         DataSet ds = GetDataSetFromExcel(openFileDialog1.FileName, false);  
    8.         this.dataGridView1.DataSource = ds.Tables[0];  
    9.     }  
  • 相关阅读:
    FastJson 配置Long转String类型 , 解决前后端交互, id过长,失去精度的问题
    idea使用技巧大全
    多线程下载工具
    https url 下载
    Jquery ajax请求格式
    AQS之可重入锁ReentrantLock原理
    整理所学之HashMap | 第二篇
    数据结构:哈希表例子
    整理所学之HashMap | 第一篇
    设计模式 | 第三篇:装饰者模式
  • 原文地址:https://www.cnblogs.com/Raywang80s/p/6903090.html
Copyright © 2011-2022 走看看