Excel获取Sheet表名

时间:2021-08-13 09:30:40

    背景:最近在做Excel的导入导出功能,收获了很多的知识,首先采用数据库链接方式,使用OLEDB链接接口访问Excel表中的数据。

链接字符串:


excel 2000 ~ 2003的 OleDb 连接串的格式如下:
Provider=Microsoft.Jet.OleDb.4.0;Data Source='excel文件路径';Extended Properties='Excel 8.0;HDR=YES'
Excel 2007之上链接字符串
Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + FilePath + "; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1


在做完Excel的工作后,发布系统后遇到 未在本地注册Microsoft ACE.OLEDB.12.0应用程序。

解决步骤一、可能是因为缺少Microsoft Office Access 2007的一些引擎组件。所以得安装一下这个组件。

解决步骤二、然后在IIS对应的应用程序池上启用32为应用程序就好。


获取Excel的Sheet表名

Excel的数据链接connection打开后,使用GetOleDbSchemaTable方法,获取Excel的表名。

   //获取Excel中的的数据
        public static System.Data.DataTable getExcelData(string strFilePath,string conditionText)
        {
            string conStr = System.Configuration.ConfigurationManager.AppSettings["officeConnection"].ToString() + "Data Source=" + strFilePath + ";Extended Properties ='Excel 12.0;HDR=Yes;IME=1'";

            System.Data.DataTable excelDt = new System.Data.DataTable();
          
            using(OleDbConnection conn = new OleDbConnection(conStr)){
                conn.Open();//链接打开,然后获取使用GetOleDbSchemaTable获取表名
                System.Data.DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
                //包含excel中表名的字符串数组
                string select = "select * from " + "[" + dtSheetName.Rows[0]["TABLE_NAME"].ToString() + "]" + conditionText+" ORDER BY 市直单位名称,定性指标名称";
                OleDbCommand cmd = new OleDbCommand(select, conn);
                OleDbDataReader reader = cmd.ExecuteReader();
                excelDt.Load(reader);
                reader.Close();

            }

            return excelDt;
        }

在获取表名的时候,有时候Excel只有一个表名,但是运行代码总是获取多个Sheet表名

解决办法

打开Excel的VB宏(art+F11)

插入窗体或者模块输入如下代码

	Sub ShowAllNames()  
	    For Each n In ThisWorkbook.Names  
	        n.Visible = True  
	    Next  
End Sub

然后选择Excel的公式里面的名称管理器,打开名称公里器后,把多余的表名成删除即可。