日期:2014-05-16  浏览次数:20580 次

.Net读取xlsx文件

连接 Excel 表:

   string sqlconnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\\Book\\Book.xls;Extended Properties=Excel 8.0";
  
   (1)Excel 连接字符串:
    通过OleDb方式读取Excel文件时常常出现读取某些字段为null值,其实是有值,原因是读取文件时,Excel通常会以前10行的数据类型为参考,
    如果后边的与其不一致,则会出现些问题。 可以通过修改Excel文件的连接串,强制读取的数据为字符串类型。

    string xlsConnFormat = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; 
    // 1、HDR表示要把第一行作为数据还是作为列名,作为数据用HDR=NO,作为列名用HDR=YES; 
    // 2、通过IMEX=1来把混合型作为文本型读取,避免null值。

   注意:把一个 Excel 文件看做一个数据库,一个sheet看做一张表。语法 "SELECT * FROM [sheet1$]",表单要使用"[]"和"$"
   默认Excel的表,列名是"F1 ~ F99"。
   如果提示 “找不到可安装的ISAM。”错误,主要还是Connection字符串的问题,请注意Data Source之间是否空格,Extended Properties是否书写正确。
 
  (2)、使用 OLEDB 读取不同版本 Excel 数据的连接字符串设置
   用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的
   /// <summary>   
   /// 把数据从Excel装载到DataTable   
   /// </summary>   
   /// <param name="pathName">带路径的Excel文件名</param>   
   /// <param name="sheetName">工作表名</param>
   /// <param name="tbContainer">将数据存入的DataTable</param>
   /// <returns></returns>
   public DataTable ExcelToDataTable(string pathName, string sheetName)
   {
       DataTable tbContainer = new DataTable();
       string strConn = string.Empty;
       if (string.IsNullOrEmpty(sheetName))
       {
         sheetName = "Sheet1";
       }
       FileInfo file = new FileInfo(pathName);
       if (!file.Exists)
       {
         throw new Exception("文件不存在");
       }
       string extension = file.Extension;
       switch (extension)
       {
         case ".xls":
              strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
              break;
         case ".xlsx":
              strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
              break; 
        default:
              strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
              break;