powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получение имен листов документа Excel(OleDbConnection и DataTable)
2 сообщений из 2, страница 1 из 1
Получение имен листов документа Excel(OleDbConnection и DataTable)
    #39764588
Mixon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый!
Пытаюсь прочитать файл, имена и количество листов неизвестно, хотелось бы работать через OleDbConnection и DataTable чтобы не таскать лишнего, так вот у меня не получается получить имя листа, использую следующий код:


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
OleDbConnection oledbconnection = new OleDbConnection();
OleDbCommand oledbcommand = new OleDbCommand();
OleDbDataAdapter oledbdataadapter = new OleDbDataAdapter();
oledbconnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='1.xls';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
oledbconnection.Open();
oledbcommand.Connection = oledbconnection;
DataTable schemaTable = oledbconnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, null });
String[] mas = new string[schemaTable.Rows.Count];
for (int j = 0; j < schemaTable.Rows.Count; j++)
{
    mas[j] = schemaTable.Rows[j].ItemArray[2].ToString();
}



в массиве mas бред, по факту тестируюсь на документе с одним листом а получаю 8-12 записей, возможно это результат объединения данных, но на текущий момент в документе один лист.

Подскажите, если можно примером как прочитать файл, заранее спасибо!
...
Рейтинг: 0 / 0
Получение имен листов документа Excel(OleDbConnection и DataTable)
    #39764725
Mixon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел решение:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
public List<string> ListSheetInExcel(string filePath)
        {
            OleDbConnectionStringBuilder sbConnection = new OleDbConnectionStringBuilder();
            String strExtendedProperties = String.Empty;
            sbConnection.DataSource = filePath;
            if (Path.GetExtension(filePath).Equals(".xls"))//for 97-03 Excel file
            {
                sbConnection.Provider = "Microsoft.Jet.OLEDB.4.0";
                strExtendedProperties = "Excel 8.0;HDR=Yes;IMEX=1";//HDR=ColumnHeader,IMEX=InterMixed
            }
            else if (Path.GetExtension(filePath).Equals(".xlsx"))  //for 2007 Excel file
            {
                sbConnection.Provider = "Microsoft.ACE.OLEDB.12.0";
                strExtendedProperties = "Excel 12.0;HDR=Yes;IMEX=1";
            }
            sbConnection.Add("Extended Properties", strExtendedProperties);
            List<string> listSheet = new List<string>();
            using (OleDbConnection conn = new OleDbConnection(sbConnection.ToString()))
            {
                conn.Open();
                DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                foreach (DataRow drSheet in dtSheet.Rows)
                {
                    if (drSheet["TABLE_NAME"].ToString().Contains("$"))//checks whether row contains '_xlnm#_FilterDatabase' or sheet name(i.e. sheet name always ends with $ sign)
                    {
                        listSheet.Add(drSheet["TABLE_NAME"].ToString());
                    }
                }
            }
            return listSheet;
        }
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получение имен листов документа Excel(OleDbConnection и DataTable)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]