|
![]() |
#1 |
Moderator
|
Roman N. Krivov, спасибо за демонстрацию кода. Примерно это я и ожидал увидеть.
Цитата:
![]() Цитата:
Цитата:
Заготовьте в шаблоне табличную часть с 2-мя строками в диапазоне A19:CG20. Поименуйте этот диапазон в шаблоне, например, как "TablePart" и далее в своем коде обращайтесь к нему через этот "букмарк", т.е. Range("TablePart") вместо Range("A19:CG20"). Далее вставляйте перед второй строкой нужное кол-во строк. Допустим, надо вам всего 17 строк. 2 уже есть, значит надо вставить еще 15 перед исходной 2-й. После их вставки ваш Range("TablePart") автоматически будет ссылаться уже на Range("A19:CG35"). |
|
![]() |
#2 |
Участник
|
Цитата:
Уверен. Там одномерный массив вставлялся целиком. Нет, именно XML (Таблица XML) Вот как раз с данной проблемой и столкнулся. У меня число преобразуется в дату. В качестве типа поля в ADORecordSet использую #adDouble X++: #define.adDouble ( 5) Последний раз редактировалось Roman N. Krivov; 05.05.2010 в 11:15. |
|
![]() |
#3 |
Участник
|
Цитата:
|
|
![]() |
#4 |
Moderator
|
небольшой оффтопик
Цитата:
![]() Я как раз тут намедни демонстрировал одномерную индексацию ячеек внутри диапазона: Excel диапазон ячеек |
|
![]() |
#5 |
Участник
|
Цитата:
Сообщение от Gustav
![]() Excel в душЕ "по строкам" любит больше
![]() Я как раз тут намедни демонстрировал одномерную индексацию ячеек внутри диапазона: Excel диапазон ячеек Код: (1) (2) (3) (4) (5) (6) (7) (8) (9) Код: for (idx = 1; idx <= 9; idx++) { Range("B2:D4").Cells.Item(idx) = ItemsArray[idx]; } Код: Range("B2:D4").Cells.Item(1) = ItemsArray[1]; Range("B2:D4").Cells.Item(2) = ItemsArray[2]; Range("B2:D4").Cells.Item(3) = ItemsArray[3]; Range("B2:D4").Cells.Item(4) = ItemsArray[1]; Range("B2:D4").Cells.Item(5) = ItemsArray[2]; Range("B2:D4").Cells.Item(6) = ItemsArray[3]; Range("B2:D4").Cells.Item(7) = ItemsArray[1]; Range("B2:D4").Cells.Item(8) = ItemsArray[2]; Range("B2:D4").Cells.Item(9) = ItemsArray[3]; Последний раз редактировалось Roman N. Krivov; 06.05.2010 в 08:56. |
|
![]() |
#6 |
Moderator
|
Цитата:
Вот маленький джобик, по-моему, достаточно наглядный: X++: COM rng = sysExcelApplication::construct().workbooks().add().worksheets().itemFromNum(1).cells().range('A1:C3').comObject(); Array arr = new Array(Types::String); ; arr.value(1, '1'); arr.value(2, '2'); arr.value(3, '3'); arr.value(4, '4'); arr.value(5, '5'); arr.value(6, '6'); arr.value(7, '7'); arr.value(8, '8'); arr.value(9, '9'); rng.value2(arr); // вставка в диапазон A1:C3 - размер 3 х 3 rng = rng.Offset(4,0); rng = rng.Resize(1,9); rng.value2(arr); // вставка в диапазон A5:I5 - размер 1 х 9 (одна строка) rng = rng.Offset(3,0); rng = rng.Resize(1,12); rng.value2(arr); // вставка в диапазон A9:L9 - размер 1 х 12 (одна строка) COM::createFromObject(rng.Application()).Visible(true); |
|
![]() |
#7 |
Участник
|
Цитата:
А вот результат его работы: (см. аттач) Решил заполнять отчёт через AdoRecordSet. Последний раз редактировалось Roman N. Krivov; 06.05.2010 в 13:07. |
|
![]() |
#8 |
Участник
|
Цитата:
X++: static void ADORecordSet2Excel(Args _args) { Com comRecordSet; Com comFields; Com comField; ComExcelDocument_RU excel; Com comRange; ; comRecordSet = new COM('ADODB.Recordset'); // формируем структуру Recordset comFields = comRecordSet.Fields(); comFields.Append("FieldStr", COMVariantType::VT_BSTR); comFields.Append("FieldReal", COMVariantType::VT_R8); comFields.Append("FieldDate" , COMVariantType::VT_DATE); // Открываем RecordSet для заполнения comRecordSet.open(); // Формируем первую строку comRecordSet.AddNew(); comField = comFields.Item("FieldStr"); comField.value(comVariant::createFromStr("Первая строка")); comField = comFields.Item("FieldReal"); comField.value(comVariant::createFromReal(123.456)); comField = comFields.Item("FieldDate"); comField.value(comVariant::createFromDate(systemDateGet())); // Формируем вторую строку comRecordSet.AddNew(); comField = comFields.Item("FieldStr"); comField.value(comVariant::createFromStr("Вторая строка")); comField = comFields.Item("FieldReal"); comField.value(comVariant::createFromReal(789.01)); comField = comFields.Item("FieldDate"); comField.value(comVariant::createFromDate(systemDateGet()+10)); // Открываем Excel с пустым листом и сразу делаем его видимым excel = new ComExcelDocument_RU(); excel.newFile("",true); // Определяем ячейку, откуда будет осуществляться вывод comRange = excel.findRange("A1"); // Выводим данные comRange.CopyFromRecordset(comRecordSet); } |
|
Теги |
ado, array, excel, recordset |
|
|