我需要使用来自两个非相邻列的两个范围来创建图表,并在代码内定义将哪个范围应用于X轴和Y轴。
例如:对于两个范围M3:M15
和K3:K15
,我需要X轴值从K3
到K15
,Y轴值从M3
到M15
。
我有一个代码从两个相邻的列创建一个图表:
string start_chart_values = "M3";
int stop_chart_line_calc = 1 + num_of_rows_to_copy;
string stop_chart_values = "L" + stop_chart_line_calc.ToString();
double chart_location = stop_chart_line_calc * 12;
Excel.Range chartRange;
Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(2, chart_location, 300, 250);
Excel.Chart chartPage = myChart.Chart;
Excel.Axis yAxis = chartPage.Axes(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary);
yAxis.ScaleType = Excel.XlScaleType.xlScaleLogarithmic;
chartRange = xlWorkSheet.get_Range(start_chart_values, stop_chart_values);
chartPage.SetSourceData(chartRange);
chartPage.ChartType = Excel.XlChartType.xlXYScatterSmooth;
chartPage.ChartWizard(Source: chartRange, Title: "Recommended Blood Pressure", CategoryTitle: "Students Age", ValueTitle: "Blood Pressure");
不幸的是,此代码不够好,因为我需要能够自行选择代码中X轴和Y轴的值。
如何更改代码,以便能够在代码内定义X轴和Y轴的范围?
提前致谢
最佳答案
为此,您将需要手动设置每个系列的X和Y值,因为图表和系列初始化方法不包含此功能。请注意,您将要确保初始选择仅包含Y值,因为选择整个范围最终将创建多个序列。
这是如何修改代码以实现此目的的示例:
Excel.Series series = chartPage.SeriesCollection().Add(xlWorkSheet.Range["M3:M15"]);
series.XValues = xlWorkSheet.Range["K3:K15"];
这也可以用于创建图表,其中图表的值分为几列或几行。例如,要创建一个如下所示的图表,其中X值分为多个列:
您可以使用以下代码:
Excel.ChartObject chartObject = sheet.ChartObjects().Add(0, 0, 500, 250);
Excel.Series series = chartObject.Chart.SeriesCollection().Add(xlWorkSheet.Range["C2:C7"]);
series.XValues = xlWorkSheet.Range["A2:A4,B2:B4"];
关于c# - 使用非相邻列中的数据在C#中创建Excel图表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34251253/