我用 C# 编写了一个程序,它会自动从 CSV 文件为我生成一个图表并将其放入一个新的 XLS 文件中。但是,我需要将线的颜色(因为它是折线图)更改为红色而不是默认的蓝色。
我发现这很难做到,而且我在网上找到的东西都不起作用。请问有人能告诉我怎么做吗?
这是一个例子。我注意到当我尝试传递一个整数时,字节似乎是以相反的顺序读取的。因此,分配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;
大多数此类问题来自无法找到需要更改的确切对象和属性。
获取此信息的可靠方法是打开 Excel 文件并转到折线图。开始录制宏,然后更改要更改的项目。停止录制宏,并查看它生成的代码。这将为您提供必须使用的确切对象和属性。
然后,您可以确保您的 C# 代码使用正确的对象和属性语法。
要更改线条系列的颜色,可以使用边框属性:
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;
录制宏绝对不是找到答案的“确定”方式。对我来说,在 Excel 2007 中,我的图表记录除了一长串“ActiveSheet.ChartObjects("Chart 1").Activate”之外什么都没有。上面的答案(或我搜索的其他地方)都不适合我;但是,我能够更改线条粗细和文本并更改标记。
我在更改颜色时遇到的问题是,当我制作新图表或添加新系列时,颜色默认为自动。显然,为了关闭此行为,您需要将 Line.Visible 属性设置为 msoTriStateMixed。如果我将 Visible 改回 msoTrue,那么线条将恢复其原始颜色,并再次在 Format Data Series、Line Style 属性下选中“Automatic”。此代码适用于 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;