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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.05.2010, 15:00   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Roman N. Krivov Посмотреть сообщение
Есть в отчете табличная область, например, A19:CG35 (N столбцов и M строк). Я заполняю массив Array N x M раз.
Цитата:
Сообщение от Roman N. Krivov Посмотреть сообщение
Формируется и вставляется именно одномерный массив размер N x M элементов
Я, кажется, понял, в чем подвох - вы, видимо, заложились на то, что Excel каким-то образом сам "завернет" ваш одномерный массив по достижении границы выделенной области и продолжит заполнять эту область со следующей строки (к слову, непонятно, почему он должен заполнять ее по строкам, а не, к примеру, по столбцам). Так вот, по-моему, Excel так делать не умеет - поэтому он и дублирует данные первых N элементов массива во всех строках. Так что придется вам либо заполнять данные отдельными строками/столбцами, работая с одномерным массивом, либо передавать Excel'ю двумерный массив.
Старый 05.05.2010, 15:50   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
небольшой оффтопик
Цитата:
Сообщение от gl00mie Посмотреть сообщение
(к слову, непонятно, почему он должен заполнять ее по строкам, а не, к примеру, по столбцам)
Excel в душЕ "по строкам" любит больше
Я как раз тут намедни демонстрировал одномерную индексацию ячеек внутри диапазона: Excel диапазон ячеек
Старый 06.05.2010, 08:52   #3  
Roman N. Krivov is offline
Roman N. Krivov
Участник
 
25 / 11 (1) +
Регистрация: 04.05.2010
Адрес: Мир, Россия, Московская область
Цитата:
Сообщение от Gustav Посмотреть сообщение
Excel в душЕ "по строкам" любит больше
Я как раз тут намедни демонстрировал одномерную индексацию ячеек внутри диапазона: Excel диапазон ячеек
Вот именно, исходя из твоего описания нумерации ячеек Range(...).Cells.Item(...)
Код:
(1) (2) (3)
(4) (5) (6)
(7) (8) (9)
и должны заполняться ячейки из одномерного массива в 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.
Старый 06.05.2010, 11:19   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Roman N. Krivov Посмотреть сообщение
А на деле получается, что все строки данной матрицы равны первой, т.е.:
Вопрос: почему?
Потому что такая особенность этого дела - желает Excel элементы Array в строку записывать и всё тут.
Вот маленький джобик, по-моему, достаточно наглядный:
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);
Старый 06.05.2010, 12:02   #5  
Roman N. Krivov is offline
Roman N. Krivov
Участник
 
25 / 11 (1) +
Регистрация: 04.05.2010
Адрес: Мир, Россия, Московская область
Цитата:
Сообщение от Gustav Посмотреть сообщение
Потому что такая особенность этого дела - желает Excel элементы Array в строку записывать и всё тут.
Вот маленький джобик, по-моему, достаточно наглядный:
Джобик хорош.
А вот результат его работы: (см. аттач)

Решил заполнять отчёт через AdoRecordSet.
Миниатюры
Нажмите на изображение для увеличения
Название: Result.PNG
Просмотров: 502
Размер:	30.5 Кб
ID:	5805  

Последний раз редактировалось Roman N. Krivov; 06.05.2010 в 13:07.
Теги
ado, array, excel, recordset

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вспомогательный класс для импорта из Excel через ADO gl00mie DAX: База знаний и проекты 80 10.04.2017 10:55
Вывод всех меток из заданного уровня на заданных языках в Excel wojzeh DAX: Программирование 0 19.03.2010 23:45
Работа с Excel через COM и ошибка 0x800A03EC (Range.AutoFilter) gl00mie DAX: Программирование 15 30.03.2007 18:37
Вывод в Excel в формате XML и ширина колонок gl00mie DAX: Программирование 1 30.10.2006 10:45
Вывод в Excel в определнный Worksheet... soin DAX: Программирование 1 22.10.2004 13:53

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

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

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