设置饼图切片和图例的颜色

Setting color of pie chart slices and legend

有人知道如何在 C# 中设置 PowerPoint 2010 饼图 slice/legend 的颜色吗?我无法使从 MSDN 站点读取的任何内容正常工作。我想不出正确的方法来获取正确的对象和 属性.

编辑: 好吧,我考虑过添加代码,但我所拥有的代码不起作用,所以我不确定它会有多大帮助或提供多少信息。我不知道要使用哪个 object/method/property 来访问饼图切片颜色。我已经尝试了 Point、LegendKey、LegendEntry、Legend,并与每个相关联 methods/properties。我已经尝试了很多甚至不再出现在我的代码中的东西。

但是,就其价值而言,这就是我现在的代码:

 PowerPoint.Series series = (PowerPoint.Series)xlChart.SeriesCollection(1);
 PowerPoint.Point point = (PowerPoint.Point)series.Points(xlCol);

 point.Interior.ColorIndex = Convert.ToInt32(dataArray[2, i]);

 PowerPoint.Legend legend = (PowerPoint.Legend)xlChart.Legend;
 PowerPoint.LegendEntry lentry = (PowerPoint.LegendEntry)legend.LegendEntries(1);

如果您正确引用 Microsoft.Office.Interop.PowerPoint 对象库 (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.aspx),可以按照以下 C# 代码示例所示更改饼图点颜色:

xlChart.Series[0].Points[0].Color = Color.Red;
xlChart.Series[0].Points[1].Color = Color.Blue;

希望这会有所帮助。

Interior.ColorIndex 不会起作用,因为枚举中只有两个值:xlColorIndexAutomaticxlColorIndexNone.

然而,你非常接近。你要的是Interior.Color。我使用十六进制来设置颜色,但我相信还有其他方法。下面的示例基于这样的假设:第一张幻灯片上有一个包含饼图的现有 PowerPoint 文件,没有其他内容。显然,您会根据自己的情况进行调整。

using PowerPoint = Microsoft.Office.Interop.PowerPoint;

namespace SampleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var filePath = @"C:\users\userx\desktop\test.pptx";
            var app = new PowerPoint.Application();
            var presentation = app.Presentations.Open(filePath);
            var slide = presentation.Slides[1];
            var chart = slide.Shapes[1].Chart;
            var series = chart.SeriesCollection(1) as PowerPoint.Series;
            var point = series.Points(1) as PowerPoint.Point;
            point.Interior.Color = 0x41BA5D;
            point = series.Points(2) as PowerPoint.Point;
            point.Interior.Color = 0xA841BA;
            point = series.Points(3) as PowerPoint.Point;
            point.Interior.Color = 0xBA4141;
            point = series.Points(4) as PowerPoint.Point;
            point.Interior.Color = 0x7AB4FF;
        }
    }
}

原来的饼图是这样的:

虽然新图表是这样的:

正如我所提到的,设置颜色的方法有很多种,我向您展示了十六进制方法。如果您引用 System.Drawing 程序集,那么您将可以访问 Color,这大大简化了事情:

var point = series.Points(1) as PowerPoint.Point;
point.Interior.Color = Color.Red;
point = series.Points(2) as PowerPoint.Point;
point.Interior.Color = Color.Pink;
point = series.Points(3) as PowerPoint.Point;
point.Interior.Color = Color.Black;
point = series.Points(4) as PowerPoint.Point;
point.Interior.Color = Color.Green;

图例条目会相应地改变它们的颜色,所以如果您使用这种方法,您甚至不必担心在那里设置颜色。

如您所知,Interop 可能会很痛苦。希望这能为您解决一些问题。