Jet Engine - усечение 255 символов

Мне нужно импортировать электронную таблицу Excel в мою программу и иметь следующий код:

string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;IMEX=1;HDR=NO;""", MyExcelFile.xls);

command.CommandText = "SELECT * FROM [Sheet1$]";

(Обратите внимание, что код выше не является реальным кодом, но должен видеть, что я делаю)

Я получаю файл импортированным, только проблема в том, что все столбцы в листе Excel, которые содержат более 255 символов, усекаются.

Есть ли способ обойти это?

Я где-то читал, что если вы убедитесь, что в столбце в первых 8 строках есть длинная строка текста, тогда это будет рассматриваться как поле memo и, следовательно, не усечено, но это, похоже, не работает.

Любые идеи?

Graeme

Ответ 1

Вероятно, ваша проблема имеет более легкое решение, но в крайнем случае попытайтесь сохранить файл Excel в виде текстового файла CSV, а затем обработайте его с помощью обычных файлов и классов манипуляции с строкой вместо механизма JET.

Ответ 2

Несколько раз набросился на это. В Fortunatly есть исправление реестра для исправления, описанное здесь в MSDN: http://support.microsoft.com/kb/189897

Эффективно, Excel только смотрит на первые восемь строк данных, чтобы определить, сколько столбцов должно быть. 255 по умолчанию, если длина составляет 255 символов или меньше. В статье MSDN, на которую я ссылался выше, объясняется, как добавить раздел реестра "TypeGuessRows", который сообщает Excel, сколько строк сканировать для определения длины столбцов.

Ответ 3

Поскольку я не мог найти точный ответ, который мне нужен, я собираюсь оставить это здесь, если это поможет кому угодно.

HKEY_LOCAL_MACHINE ► Software ► Wow6432Node ► Microsoft ► Office ► 12.0 ► Access Connectivity Engine ► Engines

TypeGuessRows = 0

Источник

Ответ 4

Обычно лучше импортировать в существующую таблицу. Создание кода с помощью кода не так уж сложно.