#c# #buffer #oledb #oledbconnection
#c# #буфер #oledb #oledbconnection
Вопрос:
Итак, я новичок в Oledb, и у меня есть проект, который требует, чтобы я извлекал данные из файла Excel с помощью консольного приложения. Файл Excel содержит около 500 столбцов и 55 строк. Как я мог бы получить данные из столбцов, превышающих 255?
Комментарии:
1. Вам нужно использовать драйвер ACE (не Jet), чтобы получить более 255 столбцов, а рабочая книга должна быть xlsx. Excel 2007 обновите Excel, чтобы получить больше 255 столбцов, которые не поддерживались в Excel 2003 с помощью Jet.
2. Загляните в OpenXML (это пакет NuGet) и избегайте OleDb и драйвера ACE. Он может читать очень большие файлы Excel. Я использовал файлы Excel объемом 4 ГБ без проблем.
3. спасибо, Джимми, я попробую. Это выглядит более многообещающе, спасибо
4. Не уверен, почему это было отклонено. Мне кажется, это вполне разумный вопрос.
Ответ №1:
Для чтения столбцов 256 -> вам просто нужно изменить инструкцию Select. По умолчанию драйверы Microsoft.ACE.OLEDB.12.0 и Microsoft.Jet.OLEDB.4.0 будут считывать данные из столбца 1-255 (A->IU), но вы можете попросить его прочитать остальные столбцы, указав их в инструкции Select.
Чтобы прочитать следующие 255 столбцов и указать «Sheet1» в качестве имени вашего листа, вы должны указать…
Select * From [Sheet1$IV:SP]
Это будет работать, даже если нет других 255 столбцов. Он просто вернет следующий фрагмент столбцов, если есть 1 … 255 дополнительных столбцов.
Кстати, драйвер Microsoft.ACE.OLEDB.12.0 будет читать оба файла .xls и любой вариант .xlsx, .xlsm и т.д. Без изменения расширенных свойств из «Excel 12.0». Нет необходимости в if … then…еще строка подключения в зависимости от типа файла.
Драйвер OLEDB по большей части довольно хорош, но он действительно полагается на хорошо сформированные листы. Смешанные типы данных обрабатываются не очень хорошо, и это приводит к странным вещам, если первые столбцы / строки пусты, но в остальном все в порядке. Я много им пользуюсь.