2014-09-04 4 views
2

Я генерируя первенствует круговая диаграмма с Delphi и все идет хорошо, за исключением, когда я хочу этикетки (со значениями) для отправки на внешней стороне PieOLE Automation Delphi Excel Chart Labels позиционирующие

Так что мой генерируемой пирог выглядит следующим образом: enter image description here

И я хочу, чтобы получить это:

enter image description here

Так что мой код выглядит следующим образом:

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, но я не могу его применить к Delphi. Макрос код, который я хочу использовать в Дельфах:

ActiveSheet.ChartObjects("Chart 1").Activate 
Selection.Position = xlLabelPositionOutsideEnd 

ответ

3

объект Series имеет DataLabels метод, если вы опускаем необязательный параметр индекса может возвращать DataLabels объект, который имеет Position свойство, что вы можете увидеть в ваш записанный макрос. Поэтому я считаю, что вы можете добавить следующую строку в конец вашего опубликованного кода:

E.ActiveChart.SeriesCollection(1).DataLabels.Position := xlLabelPositionOutsideEnd; 
+0

Отлично. Благодарю. Вы решили мою проблему – user1137313

+0

Добро пожаловать! – TLama

Смежные вопросы