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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.05.2005, 17:30   #1  
DenNik is offline
DenNik
Участник
 
62 / 9 (1) +
Регистрация: 24.05.2005
Графики в Excel
Всем здаравствуйте. Есть небольшая проблема с построением графиков в Excel'e из Axapt'ы (v 2.5). Выгрузку данных я сделал посредством COM, кто - нибудь может подсказать как с помощю её создавать графики в Excel'e?
Заранее благодарен.
Старый 30.05.2005, 18:00   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Сделайте графики в шаблоне, а потом воспользуйтесь этим:
http://erpkb.com/Excel/RasshirenieOb...enijaDiagrammy
Старый 31.05.2005, 06:16   #3  
DenNik is offline
DenNik
Участник
 
62 / 9 (1) +
Регистрация: 24.05.2005
Да это идея, проблема вся в том, что пользователи сами должны выбирать оси и тип графика (гистограмма, круковая диаграмма...), пэтому, как мне кажется - лучше создавать всё вручную. Да конечно можно создать все возможные шаблоны, а потом выбирать и использовать их, но ск - ко их будет? Неизвестно.
Заранее спасибо.
Старый 31.05.2005, 11:05   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Запишите в экселе макрос про создание нужных графиков, а потом портируйте на использование класса COM
Старый 17.07.2008, 12:38   #5  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от belugin Посмотреть сообщение
Запишите в экселе макрос про создание нужных графиков, а потом портируйте на использование класса COM
а можно строить диаграммы, гистограммы сразу из аксапты?
данные при выводе в excel объединяется по ячейкам в зависимости от условий, поэтому в шаблоне не очень удобно .

Последний раз редактировалось fialka; 17.07.2008 в 12:57. Причина: дополнение
Старый 17.07.2008, 13:15   #6  
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   #7  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от ivas Посмотреть сообщение
конечно можно этож COM )
спасибо...
Старый 23.07.2008, 10:50   #8  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
а кто нибудь выводил несколько диаграмм на один лист?
Может подскажите как лучше это реализовать? я вывожу на один лист, но диаграммы накладываются друг на друга.

Последний раз редактировалось fialka; 23.07.2008 в 11:03.
Старый 23.07.2008, 11:46   #9  
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   #10  
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   #11  
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, время: 22:42.