Excel 图表 + C#

6
我正在使用Excel从C#绘制图表,但我需要图表只包括一个与另一个相关的系列,而不是两个系列(当我选择具有两列数据的范围时)。有人能帮忙吗?
        xla.Visible = true; 
        Workbook wb = xla.Workbooks.Add(XlSheetType.xlWorksheet);
        Worksheet ws = (Worksheet)xla.ActiveSheet;

        // Now create the chart.
        ChartObjects chartObjs = (ChartObjects)ws.ChartObjects(Type.Missing);
        ChartObject chartObj = chartObjs.Add(100, 20, 300, 300);
        Chart xlChart = chartObj.Chart;
        Range rg = ws.get_Range("B2", "C17");
        xlChart.SetSourceData(chartRange, XlRowCol.xlColumns);

谢谢


我对你试图做什么感到困惑。 - The Muffin Man
当您在Excel中拥有两列数据并选择它们并插入图表时,它可以生成两个系列的线条或者生成一个系列(即:线条),该系列相对于两个列,就好像第一列是x轴,第二列是y轴。我需要在代码中实现这个功能,而不是生成两个系列,如我所提到的。 - Abd
1个回答

12

我稍微清理了一下代码,并添加了随机数据的生成,因此这个程序可以自己运行。

Random random = new Random();
Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application();
xla.Visible = true;
Workbook wb = xla.Workbooks.Add(XlSheetType.xlWorksheet);

Worksheet ws = (Worksheet)xla.ActiveSheet;

// Now create the chart.
ChartObjects chartObjs = (ChartObjects)ws.ChartObjects();
ChartObject chartObj = chartObjs.Add(150, 20, 300, 300);
Chart xlChart = chartObj.Chart;

// generate some random data
for (int row = 0; row < 16; row++)
{
    ws.Cells[row + 2, 2] = row + 1;
    ws.Cells[row + 2, 3] = random.Next(100);
}

Range xValues = ws.Range["B2", "B17"];
Range values = ws.Range["C2", "C17"];

SeriesCollection seriesCollection = xlChart.SeriesCollection();

Series series1 = seriesCollection.NewSeries();
series1.XValues = xValues;
series1.Values = values; 

2
+1!尝试了您的代码,但在此行SeriesCollection seriesCollection = xlChart.SeriesCollection();处出现了COM异常。 - GETah
@GETah - 这可能意味着您没有安装图表或没有正确创建chartObj。如果您需要帮助,请提供更多细节(什么异常,您正在做什么),并提出单独的问题。 - Emond
谢谢您的快速回复。如果可以的话,我实际上在一个独立的VSTO应用程序中使用了您的代码。 - GETah
1
@GETah - 该代码未在VSTO应用程序中编写或测试。您应该能够做类似的事情,但会有所不同。 - Emond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接