使用OleDbConnection获取第一个Excel工作表名称

时间:2009-08-20 14:39:00

标签: excel oledbconnection

我有一个问题。我需要在工作簿中获取excel工作表名称,该工作簿位于最左侧的工作表选项卡上 - 从我的角度来看第一个工作簿。

我正在使用此代码:

public static string GetFirstExcelSheetName(OleDbConnection connToExcel)
{
    DataTable dtSheetName = 
    connToExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    List<String> lstExcelSheet = new List<string>(dtSheetName.Rows.Count);

    foreach (DataRow row in dtSheetName.Rows)
        lstExcelSheet.Add(row["TABLE_NAME"].ToString());

    return lstExcelSheet[0];
}

这里的问题是它返回的行不是以可视选项卡顺序而是以非常不同的顺序返回 - 很可能是行创建的日期。

如何才能根据Tab键顺序获取sheetnames表,以便我可以轻松获得第一个excel表名?

谢谢, kalem keki

5 个答案:

答案 0 :(得分:1)

它应该是工作簿(?)集合中的第零项。 我认为你有正确的索引,错误的收集。

抱歉,您没有注意到您正在使用数据表的行集合。 那是一个不同的问题。 你如何创建数据表? 您可能必须更改数据视图的排序属性。

答案 1 :(得分:1)

Dim dtSheetnames As DataTable = oleDBExcelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
Dim FirstSheetName As String = dtSheetnames.Rows(0)!TABLE_NAME.ToString

答案 2 :(得分:1)

第0行不是excel文件中的第一个工作表,行按此字母顺序排序:/

答案 3 :(得分:0)

我建议使用NPOI库(http://npoi.codeplex.com/)而不是OleDB从Excel中检索数据(包括元数据)。

IIRC,OleDB也将因包含空格或美元符号的表格名称而失败。

答案 4 :(得分:0)

   OleDbConnection oconn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Session["path"].ToString() + "; Extended Properties=Excel 12.0;Persist Security Info=False;");

            oconn.Open();
            myCommand.Connection = oconn;
            DataTable dbSchema = oconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,  null);
            if (dbSchema == null || dbSchema.Rows.Count < 1)
            {
                throw new Exception("Error: Could not determine the name of the first worksheet.");
            }
            string firstSheetName = dbSchema.Rows[0]["TABLE_NAME"].ToString();