AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2009, 12:11   #1  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Хм... интересный какой эффект: если добавить еще пару полей (в моем джобе):
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);
то вылетает с ошибкой. Если уменьшить кол-во серийников до 40, то нормально проходят все 3 поля.

Дальше - больше: если оставить одно поле, но добавить пару записей, то тоже вылетает с ошибкой (пока не закомментируем строки, где 80 и 160 серийников). Получается, что чувствительно и к "горизонтальным" и к "вертикальным" добавлениям.

НО в тоже время позволяется вывести в одно поле одной записи очень много символов (до ограничения Excel в 32 767 символов в одной ячейке).
Старый 12.03.2009, 12:17   #2  
Antoncheg is offline
Antoncheg
Участник
 
41 / 11 (1) +
Регистрация: 29.02.2008
Цитата:
Сообщение от 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);
то вылетает с ошибкой. Если уменьшить кол-во серийников до 40, то нормально проходят все 3 поля.

Дальше - больше: если оставить одно поле, но добавить пару записей, то тоже вылетает с ошибкой (пока не закомментируем строки, где 80 и 160 серийников). Получается, что чувствительно и к "горизонтальным" и к "вертикальным" добавлениям.

НО в тоже время позволяется вывести в одно поле одной записи очень много символов (до ограничения Excel в 32 767 символов в одной ячейке).
Да, действительно, я тоже попробовал Вашим джобом по одной строке вывести количество символов более 10000, при этом,если добавить вторую строку, лезет ошибка...не нравится мне все это
Старый 12.03.2009, 12:25   #3  
Antoncheg is offline
Antoncheg
Участник
 
41 / 11 (1) +
Регистрация: 29.02.2008
Есть предположение попробовать Excel 2007. Буду копать.
Старый 12.03.2009, 13:26   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
911 символов
Как выясняется, CopyFromRecordset загибается при длине строки более 911 символов (просто какой-то телефонный "привет" от службы спасения! )

О проблеме знают в мире: http://www.google.ru/search?hl=ru&q=...1&lr=&aq=f&oq=
но пока ничего утешительного я не нашёл.
Старый 12.03.2009, 13:33   #5  
Antoncheg is offline
Antoncheg
Участник
 
41 / 11 (1) +
Регистрация: 29.02.2008
Цитата:
Сообщение от 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  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Antoncheg Посмотреть сообщение
Т.е. в 2007 офисе эта проблема исправлена...
Получается, что так. Интересно, что ее также нет в более ранней 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
Отмечу, что проблема существует лишь для массивов (очевидно, CopyFromRecordset тоже ими оперирует). Если выполнить оператор с простым (не "массивным") присвоением, то всё ОК:
Код:
Range("A2").Value = String(912, 66) ' нормально поместит 912 букв B в ячейку
Старый 12.03.2009, 13:57   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Antoncheg Посмотреть сообщение
в отгрузку может попасть партия из 300 единиц одной номенклатуры и 500, что подразумевает более объемного формата строки.
Что если попробовать нарезать ваши 500 серийников на 10 колонок по 60, а в 11-й собрать при помощи формулы?
Цитата:
Сообщение от Antoncheg Посмотреть сообщение
Может быть попробовать какой-нибудь другой метод экспорта? Есть мнения?
Любой, который пишет поячеечно. Например, при помощи класса ComExcelDocument_RU. Если у вас не десятки тысяч записей (иначе будет долго), то можно попробовать.
Теги
ado, excel, экспорт

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47
"Такая строка уже сущ." при переносе из Excel! Zelenhof DAX: Программирование 2 13.01.2003 13:41

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:46.