Реактивный двигатель - усечение 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
обычно лучше всего импортировать в существующую таблицу. Не слишком сложно создать подходящую таблицу с помощью кода.