OLE自动化Delphi Excel图表标签定位
我从Delphi生成了一个excel饼图,除了当我想把标签(带有值)发送到饼图的外部时
所以我生成的派看起来像这样:
我想获得这个:
所以我的代码如下所示:
if not CreateExcel then exit; VisibleExcel(false); if AddWorkBook then begin SelectSheet(1); end; AddChart(ChartName,xl3DPieExploded);//xl3DColumn); SetSourceData(1{ChartName},2,'A1:B5',xlColumns); randomize; VisibleExcel(false); E.ActiveWorkbook.Sheets.Item[2].Cells[1,1] :='Some text'; E.ActiveWorkbook.Sheets.Item[2].Cells[1,2] :='Chart title'; E.ActiveWorkbook.Sheets.Item[2].Cells[2,1] :='Mijloace de productie'; E.ActiveWorkbook.Sheets.Item[2].Cells[3,1] :='Mediul de munca'; E.ActiveWorkbook.Sheets.Item[2].Cells[4,1] :='Sarcina de munca'; E.ActiveWorkbook.Sheets.Item[2].Cells[5,1] :='Executant'; E.ActiveWorkbook.Sheets.Item[2].Cells[2,2] := FloatToStr(proc1)+'%'; E.ActiveWorkbook.Sheets.Item[2].Cells[3,2] := FloatToStr(proc2)+'%'; E.ActiveWorkbook.Sheets.Item[2].Cells[4,2] := FloatToStr(proc3)+'%'; E.ActiveWorkbook.Sheets.Item[2].Cells[5,2] := FloatToStr(proc4)+'%'; // remove the legend E.ActiveWorkbook.Charts.Item['Chart1'].Select; E.ActiveChart.Legend.Select; E.Selection.Delete; // apply labels E.ActiveWorkbook.Charts.Item['Chart1'].Select; E.ActiveChart.SeriesCollection(1).ApplyDataLabels; // formatting chart labels. E.ActiveChart.ApplyDataLabels(xlDataLabelsShowLabelAndPercent, false,true, true{HasLeaderLines: OleVariant; }, false {ShowSeriesName: OleVariant;}, true {ShowCategoryName: OleVariant; }, true {ShowValue: OleVariant;}, false {ShowPercentage: OleVariant; }, false {ShowBubbleSize: OleVariant;}, '; '{Separator: OleVariant; } );
所以它有LeaderLines,它到目前为止,但现在我想看到馅饼之外的标签,距离。 我怎样才能做到这一点。 我在Excel中logging了一个macros,但我似乎无法将其应用于Delphi。 我想在Delphi中使用的macros代码是:
ActiveSheet.ChartObjects("Chart 1").Activate Selection.Position = xlLabelPositionOutsideEnd
Series
对象具有DataLabels
方法,如果您省略可选的index参数,则可以返回具有Position
属性的DataLabels
对象,您可能会在录制的macros中看到该对象。 所以我相信你可以添加以下行到你的发布代码的末尾:
E.ActiveChart.SeriesCollection(1).DataLabels.Position := xlLabelPositionOutsideEnd;