你如何获得excel工作簿第一页的名称?

时间:2009-09-15 13:58:07

标签: c# excel

假设您不知道Excel工作簿中第一个工作表的名称。并且您想要找到一种从第一个页面读取的方法。这个片段有时会起作用,但并非总是如此。只有我吗?或者有没有一种明智的方法来做到这一点?

            MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + inputFile + "';Extended Properties=Excel 8.0;");

            String[] excelSheets = new String[tbl.Rows.Count]; 
            int i = 0;
            foreach (DataRow row in tbl.Rows)
            {
                excelSheets[i] = row["TABLE_NAME"].ToString();
                i++;
            }
            string pageName = excelSheets[0]; 

            OleDbDataAdapter myAdapter = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [" + pageName + "]", MyConnection);

注意:我正在寻找第一张工作表的 名称

4 个答案:

答案 0 :(得分:8)

如果您在计算机上安装了Office,为什么不使用Visual Studio Tools for Office(VSTO)。这里基本上是获取工作表的代码:

Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook =  app.Workbooks.Open(fileName,otherarguments);
Microsoft.Office.Interop.Excel.Worksheet worksheet =  workbook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet;

答案 1 :(得分:2)

您的代码似乎缺少tbl的定义。我认为它类似于

DataTable tbl = MyConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

如果是这样,你可能会得到片名,但顺序错误。

我找不到适合这个问题的解决方案,所以我从另一个角度来看待它。我决定寻找实际上有相关信息的表格。您可以通过查看行来执行此操作,但我使用的方法是查看架构信息中的列。 (这显然会在你用过的工作表中失败只有一列,因为未使用的工作表也有一列),但它在我的情况下工作,我也用它来检查我有预期的列数(在我的情况下是九)< / p>

这使用GetOleDbSchemaTable(OleDbSchemaGuid.Columns,null)方法返回列信息。

代码可能无关紧要/ trival,当我遇到这个问题时碰巧学习LINQ,所以我用LINQ风格写了

它确实需要一个名为LinqList的小类,您可以获得here

DataTable columnDetails = objConn.GetOleDbSchemaTable(
                          System.Data.OleDb.OleDbSchemaGuid.Columns,  null);    

LinqList<DataRow> rows = new LinqList<DataRow>(columnDetails.Rows);           

var query= (from r in rows
             group r by r["Table_Name"] into results
             select new { results.Key , count=results.Count() }  
            ); 

var activeSheets =  (from sheet in query
                      where sheet.count == 9 
                      select sheet.Key
                     ).ToList();

 if (activeSheets.Count != 1)
    ... display error

答案 2 :(得分:1)

这与其他问题First sheet Excel

相同

我认为返回表的顺序搞砸了。我们需要找到一种方法来获取选项卡的顺序。现在,如果您检查代码,有时第一张表是索引0.但它可以按任何顺序返回。我已经尝试删除其他工作表,只有一个你得到正确的名称。但这不会是实际的。

编辑:经过一些研究,可能会按照名称Using Excel OleDb to get sheet names IN SHEET ORDER的顺序返回标签 见链接

答案 3 :(得分:0)

SpreadsheetGear for .NET将允许您加载工作簿并获取工作表的名称(使用IWorkbook.Worksheets [sheetIndex] .Name)并获取每个单元格的原始数据或格式化文本(它会做更多但这可能是什么如果您当前正在使用OleDB,那么您正在寻找。

您可以下载免费试用here

免责声明:我拥有SpreadsheetGear LLC