添加系列到Excel图表异常

时间:2014-05-28 11:36:06

标签: c# excel series

我有一个充满了一些数据的excel文件。我正在尝试打开第二张表并创建一个图表。问题是,Series给了我一个System.Runtime.InteropServices.COMException was caught,或者如果我取消注释评论的行No overload for method 'SeriesCollection' takes '0' arguments。这是我的代码:

Microsoft.Office.Interop.Excel.ChartObjects chartObjs = (Microsoft.Office.Interop.Excel.ChartObjects)ws.ChartObjects(Type.Missing);
            Microsoft.Office.Interop.Excel.ChartObject chartObj = chartObjs.Add(100, 20, 300, 300);
            Microsoft.Office.Interop.Excel.Chart xlChart = chartObj.Chart;

            Range rg1 = ws.get_Range("A1", "D" + rowcount);
            rg1.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;

            xlChart.SetSourceData(rg1, Microsoft.Office.Interop.Excel.XlRowCol.xlColumns);
            xlChart.ChartType = XlChartType.xlLine;
            xlChart.Legend.Position = XlLegendPosition.xlLegendPositionBottom;

            Axis axis = (Axis)xlChart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlValue, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary);

            axis.MaximumScaleIsAuto = false;
            axis.MaximumScale = 3;

            Axis Xaxis = (Axis)xlChart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlCategory, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary);
            Xaxis.TickLabels.Orientation = XlTickLabelOrientation.xlTickLabelOrientationDownward;

            //SeriesCollection seriesCollection = (SeriesCollection)xlChart.SeriesCollection();

            Series s1 = (Series)xlChart.SeriesCollection(1);
            s1.Name = "Serie1";
            s1.MarkerStyle = XlMarkerStyle.xlMarkerStyleCircle;

            //seriesCollection.NewSeries();

            Series s2 = (Series)xlChart.SeriesCollection(2);
            s2.Name = "Serie2";
            s2.MarkerStyle = XlMarkerStyle.xlMarkerStyleNone;

            //seriesCollection.NewSeries();

            Series s3 = (Series)xlChart.SeriesCollection(3);
            s3.Name = "Serie3";
            s3.MarkerStyle = XlMarkerStyle.xlMarkerStyleNone;

如果我保留评论,则错误显示无效参数并显示在该行:     系列s2 =(系列)xlChart.SeriesCollection(2); 如果删除注释,我会在该行上获得第二个例外:

SeriesCollection seriesCollection = (SeriesCollection)xlChart.SeriesCollection();

如果我将1添加为参数,则表示图表显示不正确。您对如何使其有效有任何建议吗?

2 个答案:

答案 0 :(得分:1)

哎呀那些东西仍然让我做恶梦。 SeriesCollection周围有一些奇怪的东西 - 但我不记得究竟是什么。

尝试重新包含该行 // SeriesCollection seriesCollection =(SeriesCollection)xlChart.SeriesCollection(); 并且到处引用seriesCollection对象。 Alos可能是,SeriesCollection的索引是从零开始的,你可以试试吗?

答案 1 :(得分:0)

默认情况下,当您创建新图表时,它没有任何系列,因此您无法使用chartPage.SeriesCollection(1)进行选择。您需要先创建一个系列。

要添加新系列,您需要使用以下内容:

SeriesCollection seriesCollection = (SeriesCollection)xlChart.SeriesCollection();

Series s1 = seriesCollection.NewSeries();
s1.Name = "Serie1";
s1.MarkerStyle = XlMarkerStyle.xlMarkerStyleCircle;

Series s2 = seriesCollection.NewSeries();
s2.Name = "Serie2";
s2.MarkerStyle = XlMarkerStyle.xlMarkerStyleNone;

您可能还需要将值添加到系列而不是图表中,例如:

Series ser = sc.NewSeries();
ser.XValues = _excelWorksheet.Range[YourRange];
ser.Values = _excelWorksheet.Range[YourRange];