При разборе файла Excel в C # ячейки обрезаются на 255 символов ... как мне это остановить? - PullRequest
16 голосов
/ 29 мая 2009

Я анализирую загруженные файлы Excel (xlsx) в asp.net с помощью c #. Я использую следующий код (упрощенно):

string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";");
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connString);
DataSet ds = new DataSet();
adapter.Fill(ds);
adapter.Dispose();
DataTable dt = ds.Tables[0];
var rows = from p in dt.AsEnumerable() select new { desc = p[2] };

Это отлично работает, , но , если в ячейке больше 255 символов, оно будет обрезано. Есть идеи, что я делаю не так? Спасибо.

РЕДАКТИРОВАТЬ: при просмотре листа Excel, он показывает гораздо больше, чем 255 символов, поэтому я не думаю, что сам лист ограничен.

Ответы [ 6 ]

16 голосов
/ 27 сентября 2010

Решение!

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

Необходимо обновить этот раздел реестра перед анализом электронной таблицы Excel:

// Excel 2010
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\
or
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\

// Excel 2007
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\

// Excel 2003
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\

Измените TypeGuessRows на 0 и ImportMixedTypes на Text под этим ключом. Вам также необходимо обновить строку подключения, включив в расширенные свойства IMEX=1:

string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";");

Ссылки

http://blogs.vertigo.com/personal/aanttila/Blog/archive/2008/03/28/excel-and-csv-reference.aspx

http://msdn.microsoft.com/en-us/library/ms141683.aspx

... символы могут быть усечены. для импорта данные из столбца заметок без усечение, вы должны убедиться, что столбец памятки по крайней мере в одном из выбранные строки содержат значение больше чем 255 символов, или вы должны увеличить количество строк, выбранных драйвер для включения такой строки. Вы может увеличить количество строк выборка путем увеличения значения TypeGuessRows под HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel ключ реестра ....

4 голосов
/ 19 сентября 2016

Я сталкивался с этим, и решение, которое работало для меня, состояло в том, чтобы переместить ячейки с длинным текстом в верхнюю часть таблицы.

Я нашел этот комментарий на форуме, описывающем проблему

Это проблема поставщика Jet OLEDB. Смотрит на первые 8 строк
из электронная таблица для определения типа данных в каждом столбце. Если столбец
не содержат значение поля более 256 символов в первых 8 строках , затем оно принимает
тип данных это текст, который имеет ограничение на число символов 256. В следующей статье базы знаний есть
Больше информация по этому вопросу: http://support.microsoft.com/kb/281517

Надеюсь, это поможет кому-то еще!

1 голос
/ 29 мая 2009

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

[Изменить] Для чего стоит этот диалог с командой MS-Excel является интересным чтением. В разделе комментариев внизу они обсуждают это ограничение. Говорят, что Excel 12 может поддерживать 32 тыс. Символов на ячейку.

Если это правда, должен быть способ получить эти данные. Вот две вещи для рассмотрения.

  1. В прошлом я использовал опцию «IMEX = 1» в моей строке подключения, чтобы иметь дело со столбцами, содержащими смешанные данные, которые отображаются как пустые. Это длинный план, но вы можете попробовать.

  2. Не могли бы вы экспортировать файл в плоский файл с разделителями табуляции? ИМХО, это самый надежный способ работы с данными Excel, так как в Excel так много ошибок.

0 голосов
/ 03 сентября 2010

Что касается последнего поста, я также использую SpreadsheetGear и обнаружил, что он также страдает от ограничения в 255 символов на ячейку при чтении из старого формата XLS (не XLSX).

0 голосов
/ 29 мая 2009

SpreadsheetGear for .NET может читать и записывать (и более) рабочие книги xls и xlsx и поддерживает те же ограничения, что и Excel для текста - другими словами, это будет просто работать. Есть бесплатная оценка, если вы хотите попробовать.

Отказ от ответственности: я владею SpreadsheetGear LLC

0 голосов
/ 29 мая 2009

Просто после быстрого поиска предмета, кажется, что это предел Excel.

РЕДАКТИРОВАТЬ : Возможное решение (к сожалению, в VB)

...