C#操作Excel时出现错误:“'Sh…

对于出现如题的错误,本人的另一篇博文已经指出原因,那么怎样才能自动获得Excel中各个sheet的名称呢?这样就能动态的选中返回那个sheet的数据,即使用户更改了名称也不怕,完全可以把所有sheet的名称列出来供用户选择。下面就把解决问题的代码列出来,主要用到了OleDbConnection.GetOleDbSchemaTable()方法。

         ///
         /// 执行导入
         ///
         /// Excel文件名
         /// DataSet
         public static DataSet doImport(string strFileName)
         {
             if (strFileName == "")
                 return null;
             else
             {
                 DataSet ExcelDs = new DataSet();
                 try
                 {
                     //Excel数据库连接串
                     strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = '" + strFileName + "';Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";
                     OleDbConnection OleDB = new OleDbConnection(strConn);//打开数据源连接
                     OleDB.Open();//打开连接
                     //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等
                     System.Data.DataTable dtSheetName = OleDB.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
                     //声明包含excel中表名的字符串数组
                     string[] strTableNames = new string[dtSheetName.Rows.Count];
                     //将表名存入数组中
                     for (int k = 0; k < dtSheetName.Rows.Count; k++)
                     {
                         strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
                     }
                     //从指定的表名查询数据
                     string strSheet = "select * from [" + strTableNames[0] + "]";
                     OleDbDataAdapter ExcelDA = new OleDbDataAdapter(strSheet, OleDB);//连接数据库
                     ExcelDA.Fill(ExcelDs, "ExcelInfo");
                 }
                 catch (Exception err)
                 {
                     MessageBox.Show(err.Message.Tostring(), "错误提示");
                 }
                 return ExcelDs;
             }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值