【问题标题】:Set x and y axis on an Excel scatter plot in C#在 C# 中的 Excel 散点图上设置 x 和 y 轴
【发布时间】:2020-04-23 09:09:06
【问题描述】:

我在 Excel 工作表中有这样的数据:

15 0.5   25 0.36
20 0.32  37 0.54
35 0.33  19 0.24

数据由我的代码生成,可以通过添加更多系列的方式进行扩展。我想用 x 和 y 坐标绘制数据的散点图。

using Excel = Microsoft.Office.Interop.Excel;

    public void OpenExcel(string folder, string filename)
    {
        this.folder = folder;
        this.filename = filename;
        path = folder + @"\" + filename;

        if (File.Exists(path) != true) //if the output file does not exists, create it
        {
            var app = new Microsoft.Office.Interop.Excel.Application();
            var temp = app.Workbooks.Add();
            temp.SaveAs(path);
            temp.Close();
        }

        wb = excel.Workbooks.Open(path);
    }

    public void MakeScatterPlot(int numberofseries, int rowlenght) //we already have the data in the sheet at this point
    {
        Excel.Shape chart_shape = workSheet.Shapes.AddChart(Excel.XlChartType.xlXYScatter, 5, 5, 900, 450);
        Excel.Chart chart = chart_shape.Chart;
        Excel.Range chart_range = (Excel.Range)workSheet.Range[workSheet.Cells[1, 1], workSheet.Cells[rowlenght, (numberofseries * 2)]].Cells;
        chart.SetSourceData(chart_range, Excel.XlRowCol.xlColumns);

        for (int i = 1; i <= numberofseries; i++)
        {
           chart.SeriesCollection(i).XValues = (Excel.Range)workSheet.Range[workSheet.Cells[1, 1 + 2 * (i-1)], workSheet.Cells[rowlenght, 1]].Cells; //1, 3, 5...
           chart.SeriesCollection(i).Values = (Excel.Range)workSheet.Range[workSheet.Cells[1, 2 + 2 * (i-1)], workSheet.Cells[rowlenght, 1]].Cells; //2, 4, 6...
        }

    }

chart.SeriesCollection(i).XValues 行似乎工作正常,但我得到一个错误,当我尝试设置 y 轴时程序停止我得到一个错误:System.Runtime.InteropServices.COMException: 'Exception from HRESULT: 0x800A03EC'。如何设置 y 轴值?

【问题讨论】:

    标签: c# excel scatter-plot


    【解决方案1】:

    我似乎只是把列和行弄乱了一点:

            int xcol = 1 + 2 * (i- 1); //1, 3, 5, 6
            int ycol = xcol++; //2, 5, 7
            chart.SeriesCollection(currentarm).XValues = (Excel.Range)workSheet.Range[workSheet.Cells[1, xcol], workSheet.Cells[rowlenght, **xcol**]].Cells;
            chart.SeriesCollection(currentarm).Values = (Excel.Range)workSheet.Range[workSheet.Cells[1, ycol], workSheet.Cells[rowlenght, **ycol**]].Cells;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-07
      • 2018-12-19
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多