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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OLE и Excel, чтениие из Excel в DataTable 
:(
    Опции темы
SIRIUStar
  Дата 27.8.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте! У меня возникла проблема при чтении файла Excel через OleDbConnection( Соединение устанавливается, данные из таблицы xls запихиваются в DataTable, но не все. Не могу понять в чем дело( В место чистовых данных получаются пустые строки. Некоторые числа проходят нормально, некоторые нет. Со строками тоже самое(( Что делать? Может есть какая другая возможность вытащить данные из xls на С#?

Код

string strConnectionString = string.Empty;
strConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;data source=" + <имя файла> + ";Extended Properties=Excel 8.0;";
OleDbConnection cnCSV = new OleDbConnection(strConnectionString);
cnCSV.Open();
OleDbCommand cmdSelect = new OleDbCommand("SELECT * FROM [Лист1$]", cnCSV);
OleDbDataAdapter daCSV = new OleDbDataAdapter();
daCSV.SelectCommand = cmdSelect;
DataTable dtCSV = new DataTable();
daCSV.Fill(dtCSV);
cnCSV.Close();
daCSV = null;
for (int p = 0; i < dtCSV.Rows.Count; i++)
{
        for (int j = 0; j < dtCSV.Columns.Count; j++)
                  richTextBox1.AppendText(dtCSV.Rows[i][j] + " ");
        richTextBox1.AppendText("\n");
};


Заранее спасибо

Это сообщение отредактировал(а) SIRIUStar - 27.8.2007, 11:16
PM MAIL WWW ICQ   Вверх
Papirus
Дата 27.8.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SIRIUStar @  27.8.2007,  11:00 Найти цитируемый пост)
 В место чистовых данных получаются пустые строки. Некоторые числа проходят нормально, некоторые нет. Со строками тоже самое(( Что делать? Может есть какая другая возможность вытащить данные из xls на С#?

Увы! К сожалению в ексель полная свобода действий + автоопределение типа вставленных/введенных данных. Поэтому, если в каком-нть столбце листа екселя в первых 8 строках драйвер распознает числовой тип, а некоторые данные сохранены как текст (хотя ВЫГЛЯДЕТЬ могут как числа) - они будут считаться NULL. И наоборот - игнорируются числовые в текстовом столбце.
Сам я сколько ни ломал свою бестолковку, так ничего и не нашел, чтобы выбирать данные из екселя с помощью ADO & ADO.NET. Тем более и юзверя у нас могут запросто влепить в список фиг знает что... Например, в поле "Количество" такой текст: "Количество введем позже". 
Так что при необходимости приходится в циклах, поячеечно, проверяя содержание, и, явно преобразовывая типы. smile 
PM MAIL ICQ   Вверх
Experimenter
Дата 28.8.2007, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 17



Было здесь
Код

strConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; " & _
                                                    "Data Source = 'myfile.xls'; " & _
                                                    "Extended Properties = 'Excel 8.0; HDR = Yes; IMEX = 1'")

       ' "HDR = Yes" - импортировать заголовки столбцов из листа Excel, "No" соответственно нет
       ' вот про IMEX точно не помню, бывают значения 0, 1 и 2.
       ' 1 - импортировать все данные как текст,
       ' 0, 2 - определять тип данных по первым 8 строкам (поправьте, если я ошибаюсь)

Если все данные импортировать как текст, что тогда получится?
Второй вариант (не лучший, но когда ничего другого не остается...) - взаимодействие с Эксель через СОМ


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
SIRIUStar
Дата 28.8.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за ответы! Попробую сделать через ком) Может че получится smile 
PM MAIL WWW ICQ   Вверх
martikan
Дата 2.10.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Hi!
There was the bug.
There is the link with information about bug.
http://www.dotnet247.com/247reference/msgs/37/187667.aspx

Добавлено через 2 минуты и 26 секунд
Hi!
Also , please, use Microsoft Office SP3!!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

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


 




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


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

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