【问题标题】:Obtaining First Excel Sheet Name With OleDbConnection使用 OleDbConnection 获取第一个 Excel 工作表名称
【发布时间】:2013-12-13 19:02:11
【问题描述】:

我有一个问题。我需要在工作簿中获取 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 表名称?

谢谢, 卡莱姆凯基

【问题讨论】:

    标签: excel oledbconnection


    【解决方案1】:

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

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

    【讨论】:

    • 我使用这一行来获取 Tables 数据表:DataTable dtSheetName = connToExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    • 签出support.microsoft.com/kb/309488 我认为您可以将第二个参数从 null 更改为工作表的名称或零以限制返回到目标的表
    【解决方案2】:
    Dim dtSheetnames As DataTable = oleDBExcelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
    Dim FirstSheetName As String = dtSheetnames.Rows(0)!TABLE_NAME.ToString
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        IIRC、OleDB 也会因包含空格或美元符号的工作表名称而失败。

        【讨论】:

          【解决方案5】:
             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();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-06-07
            相关资源
            最近更新 更多