如何使用C#在Excel中更改系列颜色?

我已经用C#编写了一个程序,它可以从一个CSV文件中为我自动生成一个graphics,并把它放到一个新的XLS文件中。 但是,我需要将线的颜色(如折线图)更改为红色,而不是默认的蓝色。

我发现这是非常困难的事情,我在网上find的东西没有奏效。 请有人能告诉我如何做到这一点?

这些types的问题大多来自于无法find需要改变的确切对象和属性。

获取这些信息的一个可靠方法是打开您的Excel文件并转到折线图。 开始录制一个macros,然后改变你想改变的项目。 停止录制macros,并查看它生成的代码。 这会给你必须使用的确切的对象和属性。

然后您可以确保您的C#代码使用正确的对象和属性语法。

这是一个例子。 我注意到,当我试图传递一个整数,字节似乎是以相反的顺序读取。 所以分配0xFF0000将使蓝色变为蓝色, 0x0000FF变成红色。 幸运的是微软提供了一个枚举。

 Random random = new Random(); Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application(); xla.Visible = true; Workbook wb = xla.Workbooks.Add(XlSheetType.xlWorksheet); Worksheet ws = (Worksheet)xla.ActiveSheet; // Now create the chart. ChartObjects chartObjs = (ChartObjects)ws.ChartObjects(); ChartObject chartObj = chartObjs.Add(150, 20, 300, 300); Chart xlChart = chartObj.Chart; for (int row = 0; row < 16; row++) { ws.Cells[row + 2, 2] = row + 1; ws.Cells[row + 2, 3] = random.Next(100); } Range xValues = ws.Range["B2", "B17"]; Range values = ws.Range["C2", "C17"]; xlChart.ChartType = XlChartType.xlLine; SeriesCollection seriesCollection = chartObj.Chart.SeriesCollection(); Series series1 = seriesCollection.NewSeries(); series1.XValues = xValues; series1.Values = values; series1.Format.Line.ForeColor.RGB = (int)XlRgbColor.rgbRed; series1.Format.Line.Weight = 5; 

要更改线条系列的颜色,可以使用border属性:

 series.Border.Color = (int)Excel.XlRgbColor.rgbGreen; 

颜色也可以通过图表图例更改。

要改变一行的颜色:

 ((Excel.LegendEntry)chart.Legend.LegendEntries(1)).LegendKey.Border.ColorIndex = 10; 

要更改条的颜色,请执行以下操作:

 ((Excel.LegendEntry)chart.Legend.LegendEntries(1)).LegendKey.Interior.Color = (int)Excel.XlRgbColor.rgbRed; 

录制一个macros是绝对不是“肯定”的方式来find答案。 对于我来说,在Excel 2007中,我的图表logging除了一长串“ActiveSheet.ChartObjects(”图表1“)”激活“之外没有任何内容。 上面的答案(或其他地方,当我search)为我工作; 但是,我可以更改线条粗细和文字,并更改标记。

我改变颜色的问题是当我制作一个新的图表或添加一个新的系列时,颜色默认为Automatic。 为了closures这种行为显然你需要将Line.Visible属性设置为msoTriStateMixed。 如果我将Visible更改为msoTrue,则这些线条将恢复为其原始颜色,并再次在格式数据系列,线条样式属性下选中“自动”。 此代码适用于Excel 2007中的我:

 Excel.Series series = (Excel.Series)chartPage.SeriesCollection(1); series.Format.Line.Weight = 1.0F; series.Format.Line.Visible = MsoTriState.msoTriStateMixed; //Tri-State series.Format.Line.ForeColor.RGB =(int)Microsoft.Office.Interop.Excel.XlRgbColor.rgbRed;