| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Графики в Excel
			 
			
			Всем здаравствуйте. Есть небольшая проблема с построением графиков в Excel'e из Axapt'ы (v 2.5). Выгрузку данных я сделал посредством COM, кто - нибудь может подсказать как с помощю её создавать графики в Excel'e? 
		
		
		
		
		
		
		
	Заранее благодарен.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сделайте графики в шаблоне, а потом воспользуйтесь этим: 
		
		
		
		
		
		
		
	http://erpkb.com/Excel/RasshirenieOb...enijaDiagrammy  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да это идея, проблема вся в том, что пользователи сами должны выбирать оси и тип графика (гистограмма, круковая диаграмма...), пэтому, как мне кажется - лучше создавать всё вручную. Да конечно можно создать все возможные шаблоны, а потом выбирать и использовать их, но ск - ко их будет? Неизвестно. 
		
		
		
		
		
		
		
	Заранее спасибо.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Запишите в экселе макрос про создание нужных графиков, а потом портируйте на использование класса COM
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
данные при выводе в excel объединяется по ячейкам в зависимости от условий, поэтому в шаблоне не очень удобно .  
		Последний раз редактировалось fialka; 17.07.2008 в 12:57. Причина: дополнение  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
вот кусочек метод живет в 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). | |
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а кто нибудь выводил несколько диаграмм на один лист?  
		
		
		
		
		
		
		
		
			Может подскажите как лучше это реализовать? я вывожу на один лист, но диаграммы накладываются друг на друга. Последний раз редактировалось fialka; 23.07.2008 в 11:03.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		
  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
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# Затрудняюсь написать. Да и не верно это будет. указывать куда конкретно переместить диаграмму. Ведь от условий запуска они могут быть разные . вот тут-то и загвоздка.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  чего хотите-то в итоге? или на разных листах разместить? Цитата: 
	
		
			Сообщение от fialka
			 
 
			но как прописать такое ... / 
		
	ActiveWindow.Visible = False Windows("Книга1").Activate ActiveSheet.ChartObjects("Диагр. 1").Activate ActiveChart.ChartArea.Select COMSeries.Shapes("Диагр. 1").IncrementLeft -222# ActiveSheet.Shapes("Диагр. 1").IncrementTop -159# Затрудняюсь написать. Ко всем этим строчкам можно для наглядности приставить слева "Application." и сразу всё становится понятнее. Строчки типа: ActiveSheet.ChartObjects("Диагр. 1").Activate ActiveChart.ChartArea.Select можно сразу удалить. Они олицетворяют ваш выбор мышкой во время записи макроса и совершенно не нужны в автоматическом режиме. Ну, и хелп в Excel по этим новым объектам поглядеть надо. У объекта Shape есть не только свойства IncrementLeft и IncrementTop, но и просто Left и Top - так что можно сразу позиционировать диаграмму в конкретное место, а не передвигать ее из места по умолчанию. Цитата: 
	
1 2 3 4 5 6 или, скажем, так: 1 4 2 5 3 6  | 
| 
	
 |