Ответ 1
Как раз из быстрого Googling объекта, кажется, что это предел Excel.
Я просматриваю загруженные файлы excel (xlsx) в asp.net с помощью С#. Я использую следующий код (упрощенный):
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 символов, поэтому я не считаю, что сам лист ограничен.
Как раз из быстрого Googling объекта, кажется, что это предел Excel.
Я тоже борюсь за это сегодня. Я, наконец, заставил его работать, изменив некоторые ключи реестра перед разбором таблицы 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 раздел реестра.
Я столкнулся с этим, и решение, которое сработало для меня, состояло в том, чтобы переместить ячейки с длинным текстом в верхнюю часть таблицы.
Я нашел этот комментарий на форуме, описывающем проблему
Это проблема с поставщиком OLEDB Jet. Он смотрит на первые 8 строк
из таблицу для определения типа данных в каждом столбце. Если столбец не содержать значение поля более 256 символов в первом 8 строках, тогда оно принимает значение тип данных это текст, который имеет предел символов 256. В следующей статье базы данных есть Больше информация по этому вопросу: http://support.microsoft.com/kb/281517
Надеюсь, что это поможет кому-то еще!
Вы пытались установить тип данных столбцов для текста в электронной таблице? Я считаю, что это позволит клеткам содержать более 255 символов.
[Изменить] Для чего это стоит этот диалог с командой MS-Excel - интересное чтение. В разделе комментариев внизу они обсуждают вопрос об отключении 255. Они говорят, что Excel 12 может поддерживать 32k символов на ячейку.
Если это так, должен быть способ получить эти данные. Вот две вещи, которые следует учитывать.
В прошлом я использовал параметр "IMEX = 1" в моей строке подключения для обработки столбцов, содержащих смешанные данные, отображаемые как пустые. Это длинный, но вы можете попробовать.
Вы можете экспортировать файл в плоский файл с разделителями табуляции? IMHO - это самый надежный способ работы с данными Excel, поскольку Excel имеет так много gotchas.
SpreadsheetGear для .NET может читать и писать (и многое другое) книги xls и xlsx и поддерживает те же ограничения, что и Excel для текста другими словами, это просто сработает. Если вы хотите попробовать, вы получите бесплатную оценку.
Отказ от ответственности: у меня есть SpreadsheetGear LLC
Что касается последнего сообщения, я также использую SpreadsheetGear и обнаруживаю, что он также страдает от 255 символов на ограничение ячейки при чтении из старого формата XLS (не XLSX).