使用C#的Excel中的折线图:seriesCollection无法正常工作

时间:2014-02-16 14:38:01

标签: c# excel excel-vba vba

我有这样的代码。这就是我创建文件和设置值的方式

// Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;
            Excel._Application xlApp = new Excel.Application();

            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            //add data 
            xlWorkSheet.Cells[1, 1] = 13;
            xlWorkSheet.Cells[1, 2] = 27;
            xlWorkSheet.Cells[1, 3] = 22;
            xlWorkSheet.Cells[1, 4] = 22;

            xlWorkSheet.Cells[2, 1] = 42    ;
            xlWorkSheet.Cells[2, 2] = 35;
            xlWorkSheet.Cells[2, 3] = 22;
            xlWorkSheet.Cells[2, 4] = 22;

这是我尝试创建折线图的方法:

Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
        Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 80, 300, 250);
        Excel.Chart chartPage = myChart.Chart;
        myChart.Select();

        chartPage.ChartType = Excel.XlChartType.xlXYScatterLines;
        Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application();
        Excel.SeriesCollection seriesCollection = chartPage.SeriesCollection();

        Excel.Series series1 = seriesCollection.NewSeries();
        series1.XValues = xlWorkSheet.get_Range("A1", "B1"); ;
        series1.Values = xlWorkSheet.get_Range("C1", "D1");

        Excel.Series series2 = seriesCollection.NewSeries();
        series2.XValues = xlWorkSheet.get_Range("A2", "B2"); ;
        series2.Values = xlWorkSheet.get_Range("C2", "D2");

        Excel.Series series3 = seriesCollection.NewSeries();
        series3.XValues = xlWorkSheet.get_Range("A3", "B3"); ;
        series3.Values = xlWorkSheet.get_Range("C3", "D3"); 

我试图按照自己的方式做到这一点,但遇到一些问题,系列收集并不能正常工作,他绘制了3行,但我只能看到最后一行,前一行2变成相同的点。

另外,我提供了VBA代码,不要看那里的值:

Sub Dot_chart()

ActiveSheet.Shapes.AddChart2(240, xlXYScatterLines).Select
ActiveWindow.SmallScroll Down:=6
ActiveSheet.Shapes("Chart 2").IncrementLeft 120.8823622047
ActiveSheet.Shapes("Chart 2").IncrementTop 132.3529133858
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).Name = "=List1!$B$23"
ActiveChart.FullSeriesCollection(1).XValues = "=List1!$D$22:$D$23"
ActiveChart.FullSeriesCollection(1).Values = "=List1!$D$24:$D$25"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(2).Name = "=List1!$B$23"
ActiveChart.FullSeriesCollection(2).XValues = "=List1!$E$22:$E$23"
ActiveChart.FullSeriesCollection(2).Values = "=List1!$E$24:$E$25"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(3).Name = "=List1!$B$28"
ActiveChart.FullSeriesCollection(3).XValues = "=List1!$D$27:$D$28"
ActiveChart.FullSeriesCollection(3).Values = "=List1!$D$29:$D$30"
End Sub

1 个答案:

答案 0 :(得分:2)

这段代码可以正常工作,最终我得到了如何绘制这张图。

            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;
            Excel._Application xlApp = new Excel.Application();

            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            //add data 
            xlWorkSheet.Cells[1, 1] = 13;
            xlWorkSheet.Cells[1, 2] = 27;
            xlWorkSheet.Cells[1, 3] = 22;
            xlWorkSheet.Cells[1, 4] = 22;

            xlWorkSheet.Cells[2, 1] = 42    ;
            xlWorkSheet.Cells[2, 2] = 35;
            xlWorkSheet.Cells[2, 3] = 22;
            xlWorkSheet.Cells[2, 4] = 22;

            xlWorkSheet.Cells[3, 1] = 1;
            xlWorkSheet.Cells[3, 2] = 10;
            xlWorkSheet.Cells[3, 3] = 4;
            xlWorkSheet.Cells[3, 4] = 4;


            Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
            Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 80, 300, 250);
            Excel.Chart chartPage = myChart.Chart;
            myChart.Select();

            chartPage.ChartType = Excel.XlChartType.xlXYScatterLines;
            Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application();
            Excel.SeriesCollection seriesCollection = chartPage.SeriesCollection();

            Excel.Series series1 = seriesCollection.NewSeries();
            series1.XValues = xlWorkSheet.get_Range("A1", "B1"); ;
            series1.Values = xlWorkSheet.get_Range("C1", "D1");

            Excel.Series series2 = seriesCollection.NewSeries();
            series2.XValues = xlWorkSheet.get_Range("A2", "B2"); ;
            series2.Values = xlWorkSheet.get_Range("C2", "D2");

            Excel.Series series3 = seriesCollection.NewSeries();
            series3.XValues = xlWorkSheet.get_Range("A3", "B3"); ;
            series3.Values = xlWorkSheet.get_Range("C3", "D3"); 



            xlWorkBook.SaveAs(@"C:\ProgramData\RadiolocationQ\Text.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);


            Process.Start(@"C:\ProgramData\RadiolocationQ\Text.xls");