C# :excel读取表名,这样获取的表名不会出错

来源:互联网 发布:windows只能进安全模式 编辑:程序博客网 时间:2024/06/07 16:12

对获取的表名进行了过滤处理,提取出有效的表名,放到string[]中,应用的时候需要加上$符号,比如

本来:“select * from [sheet1$]”

获得表名后string[] excelNames 需要 如对第一个表名:"select * from"+" ["+excelNames[0]+"$"+"]"(跟原来的形式相同)


 private String[] GetExcelSheetNames(string fileName)  {      OleDbConnection objConn = null;      System.Data.DataTable dt = null;      try      {          string connString=string.Empty;          string FileType =fileName.Substring(fileName.LastIndexOf("."));          if (FileType == ".xls")             connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +              "Data Source=" + fileName + ";Extended Properties=Excel 8.0;";          else//.xlsx               connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";            // 创建连接对象            objConn = new OleDbConnection(connString);          // 打开数据库连接           objConn.Open();          // 得到包含数据架构的数据表            dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);          if (dt == null)          {              return null;          }          String[] excelSheets = new String[dt.Rows.Count];          int i = 0;          // 添加工作表名称到字符串数组            foreach (DataRow row in dt.Rows)          {              string strSheetTableName = row["TABLE_NAME"].ToString();             //过滤无效SheetName               if (strSheetTableName.Contains("$")&&strSheetTableName.Replace("'", "").EndsWith("$"))              {                  excelSheets[i] = strSheetTableName.Substring(0, strSheetTableName.Length - 1);//提取有效的sheet值                //MessageBox.Show(excelSheets[i]);i++;            }                                 //i++; //放在这里是错误的,         }          return excelSheets;      }      catch (Exception ex)      {          MessageBox.Show(ex.ToString());          return null;      }      finally      {          // 清理            if (objConn != null)          {              objConn.Close();              objConn.Dispose();          }          if (dt != null)          {              dt.Dispose();          }      }  }