Я помогаю и даю советы по использованию Oledb для больших файлов Excel

#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 по большей части довольно хорош, но он действительно полагается на хорошо сформированные листы. Смешанные типы данных обрабатываются не очень хорошо, и это приводит к странным вещам, если первые столбцы / строки пусты, но в остальном все в порядке. Я много им пользуюсь.