28. oktober 2003 - 14:22Der 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?
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.
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;
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.