Avatar billede slassen Nybegynder
28. oktober 2003 - 14:22 Der er 3 kommentarer og
1 løsning

Delphi, Excel, OLE embedded charts

I Delphi har jeg lavet et program, der laver en workbook med nogle sheets vha OLE. På det ene sheet er der to kolonner med tal. Hver kolonne har sin overskrift. Jeg vil nu gerne lave en graf på det pågeældende sheet, som afbilder tallene i en X-Y graf som prikker. Jeg vil også kunne definere overskrift, gridlines, osv.

Da Chart ser ud til at lave et separat sheet (som jeg ikke ønsker at have) har jeg forsøgt noget a la dette:

VAR
  Graph : OleVariant;
BEGIN
  TRY
    bla bla           
    Graph:=Excel.Sheets[5].ChartObjects.Add(0,0,500,500);
    Graph.Source:=Excel.Sheets[5].Range['A2:B15'];
    bla bla
  EXCEPT
    bla bla
  END;
END;

Grafen bliver vist som en blank flade. Graph.Source-linien fejler.

I VBA-hjælpen har jeg fundet flg.

Set co = Sheets("Sheet1").ChartObjects.Add(50, 40, 200, 100)
co.Chart.ChartWizard Source:=Worksheets("Sheet1").Range("A1:B2"), _
    Gallery:=xlColumn, Format:=6, PlotBy:=xlColumns, _
    CategoryLabels:=1, SeriesLabels:=0, HasLegend:=1

Men dette har desværre ikke hjulpet mig videre. Er der nogen, der kan hjælpe?
Avatar billede koden12 Nybegynder
29. oktober 2003 - 15:20 #1
Kan du bruge noget af det her ?

var
  Rng: OleVariant;
  LeftEdge: Border;
{ ... }
  WS.Range['A5', 'D5'].Borders.Item[xlEdgeTop].Weight := xlThick;
  WS.Range['A5', 'D5'].Borders.Item[xlEdgeTop].Color := clYellow;
  WS.Range['A5', 'D5'].Borders.Item[xlEdgeBottom].Linestyle :=  xlDouble;
  WS.Range['A5', 'D5'].Borders.Item[xlEdgeBottom].Color := clYellow;
{ ... }


{ ... }
  WS.Evaluate('B6, C6, D6, E6, F6').Borders.Item[xlEdgeLeft].Line
  style :=  xlContinuous;
  Rng := WS.Range['A1', 'A1'];
  Rng.BorderAround(xlContinuous, xlThin, Color := clFuchsia);
  LeftEdge := WS.Range['B2', 'B5'].Borders.Item[xlEdgeLeft];
  LeftEdge.Linestyle :=  xlContinuous;
  LeftEdge.Weight := 3;
  LeftEdge.Color := clLime;
{ ... }

VH
Koden12
Avatar billede slassen Nybegynder
29. oktober 2003 - 16:49 #2
Hej,

Mange tak for svaret. Jeg har lavet en lille test, men fandt ud af at jeg mangler værdierne for xlContinuous, xlEdgeTop, xlEdgeLeft, xlEdgeBottom. Jeg får også fejl på LeftEdge:Border.
Jeg kan ikke helt gennemskue hvad dit forslag laver, men egentlig ville jeg helst have en løsning, hvor der blev indsat et chart eller chartobject (et godt gammeldags X-Y koordinatsystem) med prikker for hver X,Y-værdisæt. X-værdierne står kolonne A og Y-værdierne i kolonne B i et Excel-regneark.

Hilsen SLASSEN
Avatar billede slassen Nybegynder
31. oktober 2003 - 11:19 #3
Hej,

Jeg har prøvet mig lidt frem og kommet frem til at følgende virker nogenlunde efter hensigten. Tak for forsøget på at hjælpe til Koden12.

VAR
  XLApp, XLSheet, XLChart, Rng : OLEVariant;
  i                            : Integer;
BEGIN
(...)
{ Add an embedded chart to the active sheet }
  XlSheet.ChartObjects.Add(300,300,100,100);
  XLChart:=XLSheet.ChartObjects[1];
  { Select chart type and insert data }
  XLChart.Chart.ChartType:=xlXYScatter;
  Rng:=XlSheet.Range['A2:B10'];
  XLChart.Chart.SetSourceData(Rng,xlColumn);
  XlChart.Chart.SeriesCollection.Item[1].HasDataLabels:=False;
  XLChart.Chart.HasLegend:=False;
  { Frame chart and plot area }
  XLChart.Chart.ChartArea.Border.LineStyle:=xlSolid;
  XLChart.Chart.PlotArea.Border.LineStyle:=xlDot;
  { Define and format header }
  XLChart.Chart.HasTitle:=True;
  XLChart.Chart.ChartTitle.Text:='My Chart Title';
  XLChart.Chart.ChartTitle.Font.Name:='Ariel';
  XLChart.Chart.ChartTitle.Font.Bold:=True;
  XLChart.Chart.ChartTitle.Font.Size:=14;
  { Define and format column headers }
  FOR i:=1 TO 2 DO
  BEGIN
    XLChart.Chart.Axes[i].HasTitle:=True;
    XLChart.Chart.Axes[i].AxisTitle.Font.Name:='Ariel';
    XLChart.Chart.Axes[i].AxisTitle.Font.Bold:=True;
    XLChart.Chart.Axes[i].AxisTitle.Font.Size:=10;
    XLChart.Chart.Axes[i].HasMajorGridlines:=False;
    XLChart.Chart.Axes[i].HasMinorGridlines:=False;
    XLChart.Chart.Axes[i].MajorTickMark:=xlCross;
    XLChart.Chart.Axes[i].MinorTickMark:=xlNone;
    XLChart.Chart.Axes[i].TickLabelPosition:=xlLow;
    XLChart.Chart.Axes[i].Border.Weight:=xlThick;
    XLChart.Chart.Axes[i].Border.LineStyle:=xlContinuous;
  END;
  XLChart.Chart.Axes[1].AxisTitle.Caption:='My X Axis';
  XLChart.Chart.Axes[2].AxisTitle.Caption:='My Y Axis';
  { Put some colors on the chart and chart area }
  XLChart.Chart.ChartArea.Fill.Visible:=True;
  XLChart.Chart.ChartArea.Fill.ForeColor.SchemeColor:=17;
  XLChart.Chart.ChartArea.Fill.BackColor.SchemeColor:=6;
  XLChart.Chart.ChartArea.Fill.TwoColorGradient(msoGradientDiagonalDown, 1);
  (...)
END;

Hilsen SLASSEN
Avatar billede slassen Nybegynder
06. september 2010 - 10:43 #4
Problemet blev løst med ovenviste kode.

Hilsen
SLASSEN
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester