Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Odbc & Excel, как узнать список листов? 
:(
    Опции темы
Injener
Дата 9.10.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 6.10.2006
Где: СПб

Репутация: нет
Всего: 1



Добрый день всем!

Задача достаточно вульгарная

У меня есть excel-евские файлы, я из них читаю данные с пом. SQL запросов так

Код

OdbcConnection cn = new OdbcConnection(@"Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=c:\temp\my.xls;DefaultDir=c:\temp;");
cn.Open();
DataTable dt = new DataTable();
OdbcDataAdapter Adapter = new OdbcDataAdapter("select * from [List def$]", cn);
Adapter.Fill(dt);
cn.Close();


вопрос в том что я заранее не знаю как называется листы
могу я как-то получить список их названий
--------------------
Любое дело можно сделать тремя способами:1) правильно2) неправильно3) и так как это делают в армии
PM MAIL   Вверх
mr.DUDA
Дата 9.10.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Как вариант - открыть файл в экселе, добавив reference на Excel-евский компонент, и получать инфу оттуда.


--------------------
user posted image
PM MAIL WWW   Вверх
thomas
Дата 9.10.2007, 22:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 6
Всего: 65



Injener

Привет.
Надеюсь тебя не смутит код VB
Код

Public Function GetExcelSheetNames() As String()
        Dim dt As DataTable
        Try
            con.Open()
            dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
            If dt Is Nothing Then
                Return Nothing
            End If
            Dim excelSheet() As String
            Dim size As Integer = dt.Rows.Count - 1
            excelSheet = New String(size) {}
            Dim i As Int16 = 0
            For Each row As DataRow In dt.Rows
                Dim strSheetTableName As String = row("TABLE_NAME").ToString()
                excelSheet(i) = strSheetTableName.Substring(0, strSheetTableName.Length - 1)
                i += 1
            Next
            Return excelSheet
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            con.Close()
        End Try
    End Function 'in orde

И я бы порекомендовал заюзать другой connectionString для соединения с файлом Excel
Код

Private con As OleDbConnection
Private conStr As String
Private ExcelCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;"

If blnHeaders = True Then 
            'parametr "HDR=Yes" - забираем названия колонок в файле Excel 
            conStr = ExcelCon + "Data Source=" + strFileName + ";Extended Properties=" + Convert.ToChar(34).ToString() + "Excel 8.0;HDR=Yes" + Convert.ToChar(34).ToString()
        Else
            'parametr "HDR=No" - не берем названия колон из файла, а получаем автогенерацию типа: F1, F2, ... и так далее
            conStr = ExcelCon + "Data Source=" + strFileName + ";Extended Properties=" + Convert.ToChar(34).ToString() + "Excel 8.0;HDR=No" + Convert.ToChar(34).ToString()
        End If
        con = New OleDbConnection()
        con.ConnectionString = conStr
 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Injener
Дата 10.10.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 6.10.2006
Где: СПб

Репутация: нет
Всего: 1



thomas, большое спасибо smile 
ты как я понял сделал тож самое, только через OLE

я нашел так:
Код

            OdbcConnection cn = new OdbcConnection(@"Driver={Microsoft Excel Driver(*.xls)};DriverId=790;Dbq=C:\temp\base\Taglist_def_teomaaki.xls;DefaultDir=c:\temp;");
            cn.Open();

            DataTable metaTable = cn.GetSchema("Tables");
            foreach (DataRow row in metaTable.Rows)
            {
                Console.WriteLine(row["TABLE_NAME"].ToString());
            }

            string query = "select * from [" + metaTable.Rows[0]["TABLE_NAME"].ToString() + "]";

            DataTable dt = new DataTable();
            OdbcDataAdapter Adapter = new OdbcDataAdapter(query, cn);
            Adapter.Fill(dt);

            foreach (DataRow row in dt.Rows)
            {
                foreach (object x in row.ItemArray)
                {
                    Console.Write(x.ToString() + "; ");
                }
                Console.WriteLine();
            }

            cn.Close();


а что касательно другой коннекшон-стринг, то почему? только потому что я могу забрать название колонок в файле?
--------------------
Любое дело можно сделать тремя способами:1) правильно2) неправильно3) и так как это делают в армии
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1064 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.