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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.07.2008, 13:15   #1  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
Сообщение от fialka Посмотреть сообщение
а можно строить диаграммы, гистограммы сразу из аксапты?
данные при выводе в excel объединяется по ячейкам в зависимости от условий, поэтому в шаблоне не очень удобно .
конечно можно этож COM )
вот кусочек метод живет в ComExcelDocument_RU
X++:
void addChart(int _workSheet,
                  BookMark _bookMark,
                  str _title,
                  str _newSheetName,
                  boolean _reverse = false)
{
    COM Charts, Chart, comRange;
    COM ChartTitle, Characters, SeriesCollection, Legend, Axes, MajorGridlines, Border, Trendlines;
    COM PlotArea, Interior, TickLabels, font;
    COM ActiveSheet;
    int i;
    str bookmark;
    ;

    if (! m_comDocument)
        throw error(strFmt("@DIS6401", this.getApplicationName()));

    Charts = m_comDocument.charts();
    Charts.Add();

    Chart = m_comDocument.ActiveChart();

    comRange = this.findRange(_bookMark, _workSheet);
    Chart.SetSourceData(comRange, 1);
    Chart.ChartType(65);

    SeriesCollection = Chart.SeriesCollection(1);
    SeriesCollection.ApplyDataLabels(1, 0, 0, 0, 0, 0, 1);
    Border = SeriesCollection.Border();
    Border.Weight(4);

    Chart.HasTitle(True);
    ChartTitle = Chart.ChartTitle();
    Characters  = ChartTitle.Characters();
    Characters.Text(_title);

    ChartTitle.AutoScaleFont(false);

    Chart.Name(_newSheetName);

    Chart.HasLegend(False);

    Axes = Chart.Axes(1); // Category
    Axes.HasMajorGridlines(1);
    Axes.HasMinorGridlines(0);
    Axes.MajorTickMark(3);
    Axes.MinorTickMark(2);
    Axes.MajorUnit(7);
    Axes.MajorUnitScale(0);

    TickLabels = Axes.TickLabels();
    TickLabels.NumberFormat('ДД.ММ');

    MajorGridlines = Axes.MajorGridlines();
    Border = MajorGridlines.Border();
    Border.LineStyle(-4118);

    Axes = Chart.Axes(2); // Value
    Axes.HasMajorGridlines(1);
    Axes.HasMinorGridlines(0);

    if (_reverse)
        Axes.ReversePlotOrder(1);

    MajorGridlines = Axes.MajorGridlines();
    Border = MajorGridlines.Border();
    Border.LineStyle(-4118);

    Trendlines = SeriesCollection.Trendlines();
    Trendlines.Add();

    PlotArea = Chart.PlotArea();
    Interior = PlotArea.Interior();
    Interior.ColorIndex(2);
}
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
За это сообщение автора поблагодарили: fialka (1).
Старый 17.07.2008, 14:16   #2  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от ivas Посмотреть сообщение
конечно можно этож COM )
спасибо...
Старый 23.07.2008, 10:50   #3  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
а кто нибудь выводил несколько диаграмм на один лист?
Может подскажите как лучше это реализовать? я вывожу на один лист, но диаграммы накладываются друг на друга.

Последний раз редактировалось fialka; 23.07.2008 в 11:03.
Старый 23.07.2008, 11:46   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
  1. Возьмите свой получившийся xls-файл с диаграммами.
  2. Включите в Excel (ручками) запись макроса.
  3. Разведите свои диаграммы мышкой по рабочему листу, как вам нравится.
  4. Выключите запись макроса.
  5. Проанализируйте получившийся VBA-код и воплотите его в X++.
Старый 23.07.2008, 11:59   #5  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от Gustav Посмотреть сообщение
  1. Возьмите свой получившийся xls-файл с диаграммами.
  2. Включите в Excel (ручками) запись макроса.
  3. Разведите свои диаграммы мышкой по рабочему листу, как вам нравится.
  4. Выключите запись макроса.
  5. Проанализируйте получившийся VBA-код и воплотите его в X++.
X++:
    COM COMAppl;
    COM COMWorkbooks, COMworkbook,    COMChart;
    COM COMWorksheet;
    COM COMSeries;
    ;
   ...
    COMappl = COM::getObject(#Excel);
    if (! COMappl)
    COMappl = new COM(#Excel);
    try
    {
    COMappl.visible(TRUE);
    COMworkbooks = COMAppl.Workbooks();
    COMworkbook = COMworkbooks.add();
    COMWorksheet = COMworkbook.Worksheets();
 
    COMWorksheet = COMWorksheet.Item(1);
    COMChart = COMworkbook.Charts();
    COMChart = COMChart.add();
    COMChart.ChartType(65); 
    COMChart = COMChart.Location(2 , COMWorksheet.Name() );
    COMSeries = COMChart.SeriesCollection();
    COMSeries = COMSeries.NewSeries();
    COMSeries.Values( "1");
    COMSeries.Name( "№1");
    COMSeries.XValues( con2str(conX,";") );
  //
Запускала макрос. примерно вот так запускается первый объект.


но как прописать такое ... /
ActiveWindow.Visible = False
Windows("Книга1").Activate
ActiveSheet.ChartObjects("Диагр. 1").Activate
ActiveChart.ChartArea.Select
COMSeries.Shapes("Диагр. 1").IncrementLeft -222#
ActiveSheet.Shapes("Диагр. 1").IncrementTop -159#

Затрудняюсь написать.

Да и не верно это будет. указывать куда конкретно переместить диаграмму.
Ведь от условий запуска они могут быть разные .
вот тут-то и загвоздка.
Старый 23.07.2008, 12:12   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от fialka Посмотреть сообщение
я вывожу на один лист, но диаграммы накладываются друг на друга.
Цитата:
Сообщение от fialka Посмотреть сообщение
Да и не верно это будет. указывать куда конкретно переместить диаграмму.
ох, для начала достигните консенсуса среди себя
чего хотите-то в итоге? или на разных листах разместить?

Цитата:
Сообщение от fialka Посмотреть сообщение
но как прописать такое ... /
ActiveWindow.Visible = False
Windows("Книга1").Activate
ActiveSheet.ChartObjects("Диагр. 1").Activate
ActiveChart.ChartArea.Select
COMSeries.Shapes("Диагр. 1").IncrementLeft -222#
ActiveSheet.Shapes("Диагр. 1").IncrementTop -159#

Затрудняюсь написать.
Ну как написать... По аналогии с тем, что у вас написано выше для других объектов Excel. Отталкиваясь от объекта Application (у вас это - COMappl). Как обычно для COM-объекта. Спускаясь по иерархии объектов. Не используя более одной "точки" за раз (из-за позднего связывания).

Ко всем этим строчкам можно для наглядности приставить слева "Application." и сразу всё становится понятнее. Строчки типа:
ActiveSheet.ChartObjects("Диагр. 1").Activate
ActiveChart.ChartArea.Select
можно сразу удалить. Они олицетворяют ваш выбор мышкой во время записи макроса и совершенно не нужны в автоматическом режиме.

Ну, и хелп в Excel по этим новым объектам поглядеть надо. У объекта Shape есть не только свойства IncrementLeft и IncrementTop, но и просто Left и Top - так что можно сразу позиционировать диаграмму в конкретное место, а не передвигать ее из места по умолчанию.

Цитата:
Сообщение от fialka Посмотреть сообщение
Да и не верно это будет. указывать куда конкретно переместить диаграмму.
Ведь от условий запуска они могут быть разные .
вот тут-то и загвоздка.
Могу предположить, что разные, но наверняка в любом наборе ваших диаграмм среди них будет первая, вторая... пятая, шестая... Ну, так и спланируйте заранее диаграммоместа на вашем листе (координаты Left, Top). Например, так:
1 2
3 4
5 6
или, скажем, так:
1 4
2 5
3 6
Теги
документация

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
gl00mie: Read Excel table via ADO Blog bot DAX Blogs 2 09.04.2010 08:32
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47

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

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

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