2012-08-06 147 views
4

我画一个饼图的一些数据:添加数据标签到Excel饼图

private void DrawFractionChart(Excel.Worksheet activeSheet, Excel.ChartObjects xlCharts, Excel.Range xRange, Excel.Range yRange) 
{ 
     Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(200, 500, 200, 100); 
     Excel.Chart chartPage = myChart.Chart; 

     Excel.SeriesCollection seriesCollection = chartPage.SeriesCollection(); 
     Excel.Series series1 = seriesCollection.NewSeries(); 
     series1.XValues = activeSheet.Range["E1","E3"]; 
     series1.Values = activeSheet.Range["F1","F3"]; 

     chartPage.ApplyDataLabels(Excel.XlDataLabelsType.xlDataLabelsShowPercent, true,true,false,true,true,true,true); 
     chartPage.ChartType = Excel.XlChartType.xlDoughnut; 

     Excel.Axis axis = chartPage.Axes(Excel.XlAxisType.xlValue, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary) as Excel.Axis; 
} 

我只是无法弄清楚如何打开数据标签。我到处搜索了一下,但迄今为止,没有任何帮助。

+0

是否'chartPage.SeriesCollection(1).ApplyDataLabels'办呢? – 2012-08-07 02:50:20

回答

6

尽管试试这个(久经考验

private void DrawFractionChart(Excel.Worksheet activeSheet, Excel.ChartObjects xlCharts, Excel.Range xRange, Excel.Range yRange) 
    { 
     Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(200, 500, 200, 100); 
     Excel.Chart chartPage = myChart.Chart; 

     Excel.SeriesCollection seriesCollection = chartPage.SeriesCollection(); 
     Excel.Series series1 = seriesCollection.NewSeries(); 
     series1.XValues = activeSheet.Range["E1", "E3"]; 
     series1.Values = activeSheet.Range["F1", "F3"]; 

     chartPage.ChartType = Excel.XlChartType.xlDoughnut; 

     Excel.Axis axis = chartPage.Axes(Excel.XlAxisType.xlValue, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary) as Excel.Axis; 

     series1.ApplyDataLabels(Excel.XlDataLabelsType.xlDataLabelsShowPercent, true, true, false, true, true, true, true); 
    } 

一个快速的问题。如果您没有使用xRangeyRange那么为什么要声明它?

这是经过试验和测试的完整代码。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using Excel = Microsoft.Office.Interop.Excel; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Microsoft.Office.Interop.Excel.Application xlexcel; 
      Microsoft.Office.Interop.Excel.Workbook xlWorkBook; 
      Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; 

      object misValue = System.Reflection.Missing.Value; 
      xlexcel = new Excel.Application(); 

      xlexcel.Visible = true; 
      // Add a Workbook 
      xlWorkBook = xlexcel.Workbooks.Add(); 

      // Set Sheet 1 as the sheet you want to work with 
      xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

      xlWorkSheet.Cells[1, 5] = "Apples"; 
      xlWorkSheet.Cells[2, 5] = "Oranges"; 
      xlWorkSheet.Cells[3, 5] = "Pears"; 

      xlWorkSheet.Cells[1, 6] = "80"; 
      xlWorkSheet.Cells[2, 6] = "65"; 
      xlWorkSheet.Cells[3, 6] = "45"; 

      Excel.ChartObjects myCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing); 

      // Specified xlWorkSheet.Cells[3, 6], xlWorkSheet.Cells[3, 6] just for the heck of it. 
      DrawFractionChart(xlWorkSheet, myCharts, xlWorkSheet.Cells[3, 6], xlWorkSheet.Cells[3, 6]); 

      //Once done close and quit Excel 
      //xlWorkBook.Close(true, misValue, misValue); 
      //xlexcel.Quit(); 

      //releaseObject(xlWorkSheet); 
      //releaseObject(xlWorkBook); 
      //releaseObject(xlexcel); 
     } 

     private void DrawFractionChart(Excel.Worksheet activeSheet, Excel.ChartObjects xlCharts, Excel.Range xRange, Excel.Range yRange) 
     { 
      Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(200, 500, 200, 100); 
      Excel.Chart chartPage = myChart.Chart; 

      Excel.SeriesCollection seriesCollection = chartPage.SeriesCollection(); 
      Excel.Series series1 = seriesCollection.NewSeries(); 
      series1.XValues = activeSheet.Range["E1", "E3"]; 
      series1.Values = activeSheet.Range["F1", "F3"]; 

      chartPage.ChartType = Excel.XlChartType.xlDoughnut; 

      Excel.Axis axis = chartPage.Axes(Excel.XlAxisType.xlValue, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary) as Excel.Axis; 

      series1.ApplyDataLabels(Excel.XlDataLabelsType.xlDataLabelsShowPercent, true, true, false, true, true, true, true); 
     } 

     //private void releaseObject(object obj) 
     //{ 
     // try 
     // { 
     //  System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 
     //  obj = null; 
     // } 
     // catch (Exception ex) 
     // { 
     //  obj = null; 
     //  MessageBox.Show("Unable to release the Object " + ex.ToString()); 
     // } 
     // finally 
     // { 
     //  GC.Collect(); 
     // } 
     //} 
    } 
} 

快照

enter image description here

+1

非常棒!谢谢!我最初尝试了series.ApplyDataLabels(blahblah);除非在填写数据之前填写它,这可能就是为什么它不起作用。另外,xRange和yRange是不完整的重构的一部分。感谢您捕捉:P – 2012-08-07 18:35:06

2
  #region Export Excel To Chart 

      Excel.Range chartRange; 

      Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing); 
      Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(300, 50, 500, 500); 
      Excel.Chart chartPage = myChart.Chart; 

      chartRange = xlWorkSheet.get_Range("A6", "B" + (counter-1)); 



      chartPage.SetSourceData(chartRange, misValue); 
      chartPage.ChartType = Excel.XlChartType.xlPie;// type of chart 
      chartPage.ApplyDataLabels(Excel.XlDataLabelsType.xlDataLabelsShowPercent, Excel.XlDataLabelsType.xlDataLabelsShowLabel, true, false, false, true, false, true);// set label 
      chartPage.Export(@"C:\excel_chart_export.bmp","BMP",misValue); 


      #endregion  
1

上述解决方案并没有为我在VS 2013和Excel 2013年

添加以下引用工作:

Microsoft.Office.Core 
Microsoft.Office.Interop.Excel 

,并使用下面的方法:

Chart oChart = ...  
oChart.SetElement(Microsoft.Office.Core.MsoChartElementType.msoElementDataLabelOutSideEnd); 

源(MSDN):

https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.chart.setelement.aspx https://msdn.microsoft.com/en-us/library/microsoft.office.core.msochartelementtype.aspx