|
12.03.2009, 12:11 | #1 |
Moderator
|
Хм... интересный какой эффект: если добавить еще пару полей (в моем джобе):
X++: flds.Append('strValue2', adoTypeToExcel('str' )); flds.Append('strValue3', adoTypeToExcel('str' )); ......... fld = flds.Item('strValue2'); fld.Value(strValue); fld = flds.Item('strValue3'); fld.Value(strValue); Дальше - больше: если оставить одно поле, но добавить пару записей, то тоже вылетает с ошибкой (пока не закомментируем строки, где 80 и 160 серийников). Получается, что чувствительно и к "горизонтальным" и к "вертикальным" добавлениям. НО в тоже время позволяется вывести в одно поле одной записи очень много символов (до ограничения Excel в 32 767 символов в одной ячейке). |
|
12.03.2009, 12:17 | #2 |
Участник
|
Цитата:
Сообщение от Gustav
Хм... интересный какой эффект: если добавить еще пару полей (в моем джобе):
X++: flds.Append('strValue2', adoTypeToExcel('str' )); flds.Append('strValue3', adoTypeToExcel('str' )); ......... fld = flds.Item('strValue2'); fld.Value(strValue); fld = flds.Item('strValue3'); fld.Value(strValue); Дальше - больше: если оставить одно поле, но добавить пару записей, то тоже вылетает с ошибкой (пока не закомментируем строки, где 80 и 160 серийников). Получается, что чувствительно и к "горизонтальным" и к "вертикальным" добавлениям. НО в тоже время позволяется вывести в одно поле одной записи очень много символов (до ограничения Excel в 32 767 символов в одной ячейке). |
|
12.03.2009, 12:25 | #3 |
Участник
|
Есть предположение попробовать Excel 2007. Буду копать.
|
|
12.03.2009, 13:26 | #4 |
Moderator
|
911 символов
Как выясняется, CopyFromRecordset загибается при длине строки более 911 символов (просто какой-то телефонный "привет" от службы спасения! )
О проблеме знают в мире: http://www.google.ru/search?hl=ru&q=...1&lr=&aq=f&oq= но пока ничего утешительного я не нашёл. |
|
12.03.2009, 13:33 | #5 |
Участник
|
Цитата:
Сообщение от Gustav
Как выясняется, CopyFromRecordset загибается при длине строки более 911 символов (просто какой-то телефонный "привет" от службы спасения! )
О проблеме знают в мире: http://www.google.ru/search?hl=ru&q=...1&lr=&aq=f&oq= но пока ничего утешительного я не нашёл. Using ADO (ActiveX 2.8 Object Lib) with Excel 2003, I extract data from a worksheet and copy it to another worksheet in the same workbook. In Office 2007 everything is fine, but in Office XP and Office 2003 the CopyFromRecordset fails if a field has more than 911 bytes. Т.е. в 2007 офисе эта проблема исправлена... |
|
12.03.2009, 13:50 | #6 |
Moderator
|
Получается, что так. Интересно, что ее также нет в более ранней Excel 2000 - я проверил, запустив там такой VBA-код с http://support.microsoft.com/kb/818808/en-us :
Код: Sub XLTest() Dim aValues(4) aValues(0) = "Test1" aValues(1) = "Test2" aValues(2) = "Test3" MsgBox "First the Good range set." aValues(3) = String(911, 65) Range("A1:D1").Value = aValues MsgBox "Now the bad range set." aValues(3) = String(912, 66) Range("A2:D2").Value = aValues 'вызывает ошибку End Sub Код: Range("A2").Value = String(912, 66) ' нормально поместит 912 букв B в ячейку |
|
12.03.2009, 13:57 | #7 |
Moderator
|
Цитата:
Любой, который пишет поячеечно. Например, при помощи класса ComExcelDocument_RU. Если у вас не десятки тысяч записей (иначе будет долго), то можно попробовать. |
|