4

我正在绘制带有一些数据的饼图:

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;
}

我只是不知道如何打开数据标签。我到处搜索它,但遗憾的是到目前为止没有任何帮助。

4

3 回答 3

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();
        //    }
        //} 
    }
}

快照

在此处输入图像描述

于 2012-08-07T04:48:41.527 回答
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    
于 2015-07-13T08:39:28.950 回答
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

于 2016-07-13T17:36:42.527 回答