使用C#和oledb获取Excel工作表名称的正确方法

时间:2016-06-06 20:46:46

标签: excel visual-studio-2015 oledb

我试图弄清楚为什么我看到的行为以及"记录的"行为是不同的。我已经阅读了这两篇文章:Read and Write Excel Documents Using OLEDBWorking with MS Excel(xls / xlsx) Using MDAC and Oledb,这是来自第二个链接的文字。

如果您在第二个链接中读到它,则说:

  

检索Excel工作簿的架构信息:

     

您可以使用GetOleDbSchemaTable获取excel工作簿中存在的工作表。使用以下代码段。

     

DataTable dtSchema = null;   dtSchema = conObj.GetOleDbSchemaTable(   OleDbSchemaGuid.Tables,new object [] {null,null,null," TABLE" });

     

这里dtSchema将保存所有工作簿的列表。假设我们有两个工作簿:wb1,wb2。上面的代码将返回wb1,wb1 $,wb2,wb2 $的列表。我们需要过滤掉$ elements。

然而,当我运行此代码时,我只得到" wb1 $和wb2 $"。我可以轻松删除代码中的$,但是我试图确保当我将代码放在不同的计算机/操作系统/环境中时,我不会破坏代码,并且它的行为与记录的一致。有人可以告诉我自从这些内容发生了什么或者是否发生了变化,或者我是否遗漏了一些关键部分。需要注意的是,VS2015,Windows 7 Pro和Office 2010正在开发中。

        //Connection String
        //string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";   // Extra blank space cannot appear in Office 2007 and the last version. And we need to pay attention on semicolon.
        //string connstring = Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + path + "; Extended Properties = 'Excel 8.0;HDR=NO;IMEX=1'; ";  //This connection string is appropriate for Office 2007 and the older version. We can select the most suitable connection string according to Office version or our program.

        using (OleDbConnection conn = new OleDbConnection(_connectionString))
        {
            conn.Open();
            //DataTable sheetNames = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });  //Get All Sheets Name
            DataTable sheetNames = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);  //Get All Sheets Name
            // Loop through all Sheets to get data
            foreach (DataRow dr in sheetNames.Rows)
            {
                string sheetName = dr["TABLE_NAME"].ToString();
                //if (!sheetName.EndsWith("$"))
                //    continue;                    
                Debug.Print(sheetName);
            }
            return sheetNames;

由于

DBL

0 个答案:

没有答案