如何使用c#在Excel中创建点图,折线图?

时间:2014-02-11 08:21:35

标签: c# excel

我使用这些命名空间:Excel = Microsoft.Office.Interop.Excel;Microsoft.Office.Tools.Excel;

我需要创建一个包含许多短线的折线图,所有短线都与 x轴平行。

我已经写了所有需要的点,应该用线连接。

enter image description here

几种类型的线的y轴值是相同的,不是它们不是数字,它们是一种名称。最终这应该是这样的:enter image description here

我试图按照自己的方式做到这一点,但遇到一些问题seriesCollection并不能正常工作,他绘制了3行,但我只能看到最后一行,前一行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"); 

不知道如何解决这个问题。我认为 y轴不能是文本,只能是数字。我猜这一行应该是另一个系列

P.S。数字可以用任何所需的方式表示,以简化工作。

UPD:这就是我创建这个点图的方法,我记录了宏

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

List1表的名称。

1 个答案:

答案 0 :(得分:6)

经过几天的搜索,我找到了解决方案,希望它对某人有用。

            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");