2

我有一个问题。我需要在工作簿中获取 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];
}

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

如何根据标签顺序对 sheetnames 表进行排序,以便我可以轻松获得第一个 excel 工作表名称?

谢谢,卡莱姆凯基

4

5 回答 5

1

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

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

于 2009-08-20T14:45:18.927 回答
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
于 2009-09-22T22:34:11.577 回答
1

第 0 行不是 excel 文件中的第一张表,行在此集合中按字母顺序排序:/

于 2013-12-13T11:02:11.453 回答
0

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

IIRC,OleDB 对于包含空格或美元符号的工作表名称也将失败。

于 2009-11-18T09:28:57.350 回答
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();
于 2012-12-14T10:09:34.013 回答