Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#在Excel中更改系列颜色?_C#_Excel_Charts_Colors_Series - Fatal编程技术网

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

如何使用C#在Excel中更改系列颜色?,c#,excel,charts,colors,series,C#,Excel,Charts,Colors,Series,我已经用C#编写了一个程序,它会自动从CSV文件中为我生成一个图形,并将其放到一个新的XLS文件中。但是,我需要将线条的颜色(因为它是折线图)更改为红色,而不是默认的蓝色 我发现这非常难做到,而我在网上找到的东西却没有起作用。有人能告诉我怎么做吗 大多数此类问题都是因为无法找到需要更改的确切对象和属性 获取此信息的可靠方法是打开Excel文件并转到折线图。开始录制宏,然后更改要更改的项目。停止录制宏,查看它生成的代码。这将为您提供必须使用的确切对象和属性 然后,您可以确保您的C代码使用了正确的对

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


我发现这非常难做到,而我在网上找到的东西却没有起作用。有人能告诉我怎么做吗

大多数此类问题都是因为无法找到需要更改的确切对象和属性

获取此信息的可靠方法是打开Excel文件并转到折线图。开始录制宏,然后更改要更改的项目。停止录制宏,查看它生成的代码。这将为您提供必须使用的确切对象和属性


然后,您可以确保您的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;
Random Random=new Random();
XLA=新建微软.Office .Inop.Excel应用程序();
XLA,可见=真;
工作簿WB= XLA .工作簿.Addit(XLSEETType .xLWorkTabl);
工作表ws=(工作表)xla.ActiveSheet;
//现在创建图表。
ChartObjects chartObjs=(ChartObjects)ws.ChartObjects();
ChartObject chartObj=chartObjs.Add(150,20,300,300);
图表xlChart=图表对象图表;
对于(int行=0;行<16;行++)
{
ws.Cells[row+2,2]=row+1;
ws.Cells[row+2,3]=random.Next(100);
}
范围xValues=ws.范围[“B2”,“B17”];
范围值=宽度范围[“C2”、“C17”];
xlChart.ChartType=XlChartType.xlLine;
SeriesCollection SeriesCollection=chartObj.Chart.SeriesCollection();
Series series1=seriecollection.NewSeries();
series1.XValues=XValues;
系列1.数值=数值;
series1.Format.Line.ForeColor.RGB=(int)XlRgbColor.RGB;
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;

录制宏绝对不是找到答案的“确定”方法。对于我来说,在Excel2007中记录图表时,除了一长串“ActiveSheet.ChartObjects”(“图表1”).Activate”之外,我什么也看不到。上面(或我搜索时的其他地方)的答案都不适合我;然而,我能够改变线条的粗细和文字,并改变标记

我在更改颜色时遇到的问题是,当我制作新图表或添加新系列时,颜色默认为自动。为了关闭此行为,显然需要将Line.Visible属性设置为msotristatemix。如果我将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;

是的,出于某种奇怪的原因,Excel总是使用BGR来指定颜色,而不是RGB。当我第一次开始在Excel中使用VBA时,这给我带来了无尽的悲痛(+1)对于更改我使用的系列的确切颜色有很大帮助:series1.Format.Fill.ForeColor.RGB=(int)XlRgbColor.xlDarkGreen;嘿同样的情况也发生在我身上,但在条形图的情况下。颜色变为自动,尽管我没有添加任何新系列。我只是在运行时修改图表的范围。知道怎么解决吗?我尝试使用myChartSeries.Format.Fill.Visible=Microsoft.Office.Core.MsoTriState.msotristatemix但它不起作用。蒂亚。