6

Excel отказывается открывать некоторые файлы, которые я программно создаю. Я думаю, что происходит то, что он рвется, потому что определенный столбец имеет очень длинные строки (до 1850 символов), но для устранения неполадок, когда я делаю строки более короткими (900 символов), он открывается.

Вопрос № 1: Какую самую длинную строку я могу поместить в клетку? Некоторые результаты Google говорят, что 1024 или 7000, но я нашел 1000 слишком длинным.

Вопрос № 2: я пытался писать свои файлы в формате XML и XLS, но у обеих есть одна и та же проблема длины строки. Есть ли формат, который будет читать Excel, который позволит мне соответствовать строкам длиной 1850?

5 ответов5

6

Даже Excel 2003 может легко обрабатывать 32 767 символов в ячейке, но версии до Excel 2007 отображают только первые 1024 символа в ячейке (источник MS).

Возможно, вы столкнулись с известной проблемой, которая усекает строки до 911 символов. Я испытывал это раньше при передаче данных через соединение ADO.

Следующая ссылка относится к Excel 2003, но, похоже, это та же проблема, что и у вас.

http://support.microsoft.com/kb/818808/en-us

3

В соответствии с этим в Excel 2003 было ограничение в 1 000 символов на ячейку, которое в Excel 2007 увеличилось до 32 000 символов на ячейку. Если ваша программа программно создает файл Excel 2003 (.xls), а не файл Excel 2007 (.xlsx), это может быть причиной проблемы, поскольку формат .xls не поддерживает более 1 000 символов на ячейку.

У вас не должно быть проблем с форматом XML или XLS, идущим непосредственно в Excel 2007, поскольку ограничение Excel 2003 не должно быть задействовано, но я не могу проверить это, так как у меня нет Excel 2007, но, надеюсь, это был полезен независимо.

3

Официальные ограничения Excel говорят, что все должно быть в порядке:

http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP010073849.aspx

1

Если вы получаете данные от ADO, попробуйте коды ниже. Это сработало для меня.

Activecell.value=LEFT(YourRecordset("FieldName"), LEN(YourRecordset("FieldName")))

По сути, вы получаете все содержимое поля, но по-другому. Поскольку длина содержимого более 900 (по моему опыту), вы должны использовать альтернативный способ. Вам не нужно придерживаться функции LEFT ; функция RIGHT также работает.

1

В Excel 2013 (и я полагаю, в Excel 2007 и более поздних версиях) длина строки, отображаемой в одной ячейке, составляет 1024 символа. Я обнаружил это случайно, когда записал более длинную строку, созданную в VBA, в одну ячейку Excel, которая была последней ячейкой в столбце, содержащей данные. Обычное отображение длинной строки в ячейках справа прекращается после 1024 символов. Однако функция len правильно вернула фактический размер строки и скопировала строку (которая представляла собой список адресов электронной почты), а затем вставив ее в Outlook, получила правильную строку. Кажется, что более длинная строка, доступная в Excel 2007 и более поздних версиях, работает нормально, но не будет отображаться полностью.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .