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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.09.2008, 10:16   #8  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
В общем, формулы оказались ни при чем. Точнее, "при чем", но как бы не по своей воле.

Всему "виной" программное построение диаграммы, которое, как выяснилось, весьма капризно, и успешное завершение этого процесса зависит даже от последовательности операторов. Например, поменяйте местами два самых последних оператора (казалось бы, абсолютно независимых) в нижеследующем демонстрационном джобе и вы получите сообщение об ошибке.

Что касается формул, то всё получилось, как хотелось, после помещения кода по их созданию перед кодом для создания диаграммы. Опять-таки, если хотите увидеть, какие с ними были проблемы, перенесите код по "организации непрерывного диапазона" в место перед оператором series.XValues (см. комментарии).
X++:
{
    ComExcelDocument_RU doc = new ComExcelDocument_RU();

    COM     xlApp;
    COM     wbook;
    COM     activeSheet;
    int     i;
    COM     charts;
    COM     activeChart;
    COM     rangeOutputHeader;
    COM     range;
    COM     seriesCollection;
    COM     series;
    ;

    doc.NewFile();
    wbook = doc.getComDocument();

    xlApp = wbook.Parent();
    activeSheet = xlApp.ActiveSheet();

    // генерация тестовых данных для примера
    for (i=1; i<=10; i++)
        doc.insertValue(ComExcelDocument_RU::numToNameCell(i,1), i*10);

    // тестовые значения для XValues
    for (i=5; i<=23; i+=2)
        doc.insertValue(ComExcelDocument_RU::numToNameCell(i,2), strFmt('Категория %1', i));

    // организация непрерывного диапазона в AA2:AJ2
    range = activeSheet.Range('AA2');
    for (i=22;i>=13;i--)
    {
        range.FormulaR1C1(strFmt('=RC[-%1]', i));
        range = range.Offset(0, 1);
    }
    rangeOutputHeader = activeSheet.Range('AA2:AJ2');

    // построение диаграммы
    charts = wbook.Charts();
    activeChart = charts.Add();

    activeChart.ChartType(5); // 5 = xlPie
    activeChart.SetSourceData(activeSheet.Range('A1:J1'));

    series = activeChart.SeriesCollection(1); // немного странно, что это работает, не требуя промежуточного series = seriesCollection.Item(1);

    // если организацию непрерывного диапазона перенести сюда,
    // то будут описанные выше проблемы с формулами

    series.XValues(rangeOutputHeader); // и, как хотелось, здесь Range, а не стринг

    activeChart.Location(2, activeSheet.Name()); // 2 = xlLocationAsObject
}
P.S. Можно попробовать при "организации непрерывного диапазона" использовать формулу массива и тогда компактность кода уже может поспорить даже с перечислением адресов через запятую:
X++:
// организация непрерывного диапазона в AA2:AJ2
rangeOutputHeader = activeSheet.Range('AA2:AJ2');
rangeOutputHeader.FormulaArray('=INDEX(RC[-22]:RC[-4],{1,3,5,7,9,11,13,15,17,19})');

// построение диаграммы
За это сообщение автора поблагодарили: G.Menshikh (1), kornix (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Проблема с импортом из Excel через COM Romsrs DAX: Программирование 18 10.06.2008 10:34
Экспорт в Excel. Проблема с '\n' axaLearner DAX: Программирование 12 17.04.2006 18:43
Проблема при построении отчетов George Nordic DAX: Программирование 17 24.03.2004 13:46
Проблема с созданием шаблона импорта Excel в 3.0 AK-76 DAX: Администрирование 1 25.07.2003 22:21
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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