Получение первого имени листа Excel с помощью OleDbConnection - PullRequest
2 голосов
/ 20 августа 2009

У меня есть одна проблема. Мне нужно получить имя листа 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];
}

Проблема здесь в том, что она возвращает строки не в порядке визуальной вкладки, а в совершенно ином порядке - скорее всего, дата создания строки.

Как можно упорядочить таблицу имен листов в соответствии с порядком их табуляции, чтобы я мог легко получить первое имя листа Excel?

Спасибо, калем кеки

Ответы [ 5 ]

1 голос
/ 13 декабря 2013

Строка 0 не является первым листом в файле Excel, строки отсортированы в алфавитном порядке в этой коллекции: /

1 голос
/ 23 сентября 2009
Dim dtSheetnames As DataTable = oleDBExcelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
Dim FirstSheetName As String = dtSheetnames.Rows(0)!TABLE_NAME.ToString
1 голос
/ 20 августа 2009

Это должен быть нулевой элемент в коллекции рабочих книг (?). Я думаю, что у вас правильный индекс, неправильная коллекция.

Извините, не заметил, что вы используете коллекцию строк данных. Это другая проблема. Как вы создаете данные? Возможно, вам придется изменить свойство сортировки представления данных.

0 голосов
/ 14 декабря 2012
   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();
0 голосов
/ 18 ноября 2009

Я рекомендую использовать библиотеку NPOI (http://npoi.codeplex.com/) вместо OleDB для получения данных (включая метаданные) из Excel.

IIRC, OleDB также не будет работать с именами листов, которые содержат пробелы или знаки доллара.

...