Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Как можно получить массив данных Excel chart -а?


Автор: d0hast 30.12.2008, 15:21
Привет всем!

Как можно получить набор данных (массив) на основании которого построен сам Excel Chart?
Я пробовал через серии, но чтото у меня не вышло.
Помогите, если кто сталкивался!
Заранее спасибо!

Автор: Rrader 5.1.2009, 08:46
Ну давайте посмотрим... smile Для получения значений есть свойства Values и XValues объекта Series.

Например, строим график - точечную диаграмму, в одном столбце таблицы - значения по оси X, в другом - любая формула, которая даст значения по оси Y.

На VBA получение значений (точек), по которым построен график, будет выглядеть следующим образом:
Код

Option Explicit

Sub MySub()
  Dim I As Long
  Dim X, Y As Double
  Dim CurChart As Chart
  With Application
    ' Диаграмма
    Set CurChart = .ActiveSheet.ChartObjects(1).Chart
    For I = 1 To CurChart.SeriesCollection(1).Points.Count
      X = .WorksheetFunction.Index(CurChart.SeriesCollection(1).XValues, I)
      Y = .WorksheetFunction.Index(CurChart.SeriesCollection(1).Values, I)
      MsgBox "(" & X & " ; " & Y & ")"
    Next I
  End With
End Sub

На Delphi соответственно:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  App, Sheet, Chart: OleVariant;
  I: Integer;
  X, Y: Real;
begin
   App := ExcelApplication1.Application;
   Sheet := App.ActiveSheet;
   { Диаграмма }
   Chart := Sheet.ChartObjects(1).Chart;
   for I := 1 to Chart.SeriesCollection(1).Points.Count do
   begin
     X := App.WorksheetFunction.Index(Chart.SeriesCollection(1).XValues, I);
     Y := App.WorksheetFunction.Index(Chart.SeriesCollection(1).Values, I);
     ShowMessage('(' + FloatToStr(X) + ' ; ' + FloatToStr(Y) + ')');
   end;
   Chart := Unassigned;
   Sheet := Unassigned;
   App := Unassigned;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)