Реактивный двигатель - усечение 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 и, следовательно, не усечен, но это, похоже, не сработало.

какие идеи?

Грэм

4 ответов


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


столкнулся с этим несколько раз. Fortunatly есть Хак реестра для исправления, описанный на MSDN здесь:http://support.microsoft.com/kb/189897

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


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

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

TypeGuessRows = 0

источник


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