|
|
#1 |
|
Участник
|
Помещаю на форму ActiveX компонент "Microsoft Office Chart 11".
Затем при нажатии на кнопку делаю следующее: X++: void clicked() { Com charts; Com chart; ; super(); charts = msChart.Charts();//Получаю Charts. Ожидаю, что это аналог Charts из скриптов при создании графиков в экселе. chart = Charts.Add(); //chart = Charts.item(0); // Снятие комментария с этой строки ничего не меняет chart.HasTitle(true); //Выполняется - заголовок выводится chart.ChartType(72); //xlXYScatterSmooth тут и вылетает } Собственно сам затык он происходит вот здесь, т.к. потом точно такие же сообщения выдаются и на попытки создать серии и т.п. Кто-нибудь знает как у этого контрола достучаться до графиков? |
|
|
|
|
#2 |
|
Участник
|
__________________
С уважением, Александр. |
|
|
|
|
#3 |
|
Участник
|
Там смотрел. Первым делом. Там с документом Эксель работают. А в остальном разницы нет -
X++: Charts.Add();
Chart = m_comDocument.ActiveChart();
...
Chart.ChartType(65); |
|
|
|
|
#4 |
|
MCP
|
Цитата:
|
|
|
|
|
#5 |
|
Участник
|
Потому что, надо так
X++: Chart.Type(23); // chChartTypeScatterSmoothLineMicrosoft Office Web Components Visual Basic Reference
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
| За это сообщение автора поблагодарили: Димитрий (1). | |
|
|
#6 |
|
MCP
|
Цитата:
Сообщение от AndyD
Потому что, надо так
X++: Chart.Type(23); // chChartTypeScatterSmoothLineMicrosoft Office Web Components Visual Basic Reference 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
} |
|
|
|
|
#7 |
|
Участник
|
Э.
Вы сейчас пишите про Excel, а Дмитрий спрашивает и я отвечаю про ActiveX, который и является компонентом Office Web Components
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
| За это сообщение автора поблагодарили: kornix (1). | |
|
|
#8 |
|
Участник
|
это работает корректно, видимо, потому, что диаграммы берутся из рабочей книги, а не из контрола ActiveX
X++: COM wbook;
;
doc.NewFile();
wbook = doc.getComDocument();
charts = wbook.Charts();
__________________
С уважением, Александр. |
|
|
|
| За это сообщение автора поблагодарили: kornix (1). | |
|
|
#9 |
|
MCP
|
|
|
|
|
|
#10 |
|
Участник
|
Спасибо.
|
|
|
|
|
#11 |
|
Участник
|
Димитрий, зайдите в режим правки дизайна вашей формы, выберите ваш элемент ActiveX - msChart, нажмите правой кнопкой мыши на нем, выберите необходимый пункт меню настроек ("Данные" или "Команды и параметры") - таким образом вы можете произвести необходимые настройки данного контрола (в том числе и тип диаграммы), не прибегая к программированию.
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 29.11.2010 в 10:53. |
|
|
|
|
|