Анализируя файл Excel на C #, кажется, что ячейки обрезаются на 255 символов… как мне это остановить?

StackOverflow https://stackoverflow.com/questions/926453

Вопрос

Я анализирую загруженные файлы 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 символов, поэтому я не думаю, что сам лист ограничен.

Это было полезно?

Решение

Просто при быстром просмотре темы в Google выясняется, что это предел возможностей Excel.

Редактировать: Возможное обходное решение (к сожалению, в VB)

Другие советы

Решение!

Я тоже боролся с этим сегодня.Наконец-то я заставил это работать, изменив некоторые разделы реестра перед анализом электронной таблицы 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

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

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

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

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

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

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

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

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

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

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

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

Отказ от ответственности:Я владелец компании SpreadsheetGear LLC

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top