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;