Создание нескольких объектов диаграммы Excel с использованием c # - PullRequest
1 голос
/ 06 августа 2011

Я часами пытался создать несколько диаграмм в Excel из моего приложения на C #.Я пытаюсь создать более одного объекта диаграммы.Есть ли лучший способ сделать это?Я уверен, что строка "chartObject [col] = (Excel.Chart) oWB.Charts.Add (Missing.Value, Missing.Value, Missing.Value, Missing.Value);"где я иду не так

В тот момент, когда я вызываю эту строку, иногда создается копия последнего графика, но иногда это работает.Я вообще не могу понять логику.

Спасибо

private void CreateCharts(Excel.Worksheet oWS, int numRows, int numCols)
    {
        Excel.Workbook oWB = (Excel.Workbook)oWS.Parent;
        Excel.Series oSeries;
        //Excel._Chart chartObject;
        Excel.Chart[] chartObject = new Excel.Chart[numCols];
        Excel.SeriesCollection[] oSeriesCollection = new Excel.SeriesCollection[numCols];
        int length = numRows + 2;
        string colname;

        //then you can assign as much as series you want,
        for (int col = 0; col < numCols; col++)
        {
            //create a new chart
            chartObject[col] = (Excel.Chart)oWB.Charts.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            chartObject[col].ChartType = Excel.XlChartType.xlLine;
            oSeriesCollection[col] = (Excel.SeriesCollection)chartObject[col].SeriesCollection();

            //add the actual occupancy
            colname = GetExcelColumnName(col * 3 + 1);
            oSeries = oSeriesCollection[col].NewSeries();
            oSeries.Values = oWS.Range[colname + "2", colname + length];

            //add the expected occupancy
            colname = GetExcelColumnName(col * 3 + 2);
            oSeries = oSeriesCollection[col].NewSeries();
            oSeries.Values = oWS.Range[colname + "2", colname + length];
        }
    }

1 Ответ

0 голосов
/ 06 августа 2011

Проблема может заключаться в том, что объект Chart в Excel действительно является листом диаграммы, тогда как сама диаграмма является объектом ChartObject , а вы используете Shape возражать против этого. Вот ссылка и еще одна , которая говорит об этом abit, и некоторый код VBA из этой ссылки MS , который показывает ее немного, обратите внимание, что есть Есть несколько способов сделать это:

Sub AddChart_Excel()   
  Dim objShape As Shape   

  ' Create a chart and return a Shape object reference.   
  ' The Shape object reference contains the chart.   
  Set objShape = ActiveSheet.Shapes.AddChart(XlChartType.xlColumnStacked100)   

  ' Ensure the Shape object contains a chart. If so,   
  ' set the source data for the chart to the range A1:C3.  
  If objShape.HasChart Then  
    objShape.Chart.SetSourceData Source:=Range("'Sheet1'!$A$1:$C$3")  
  End If  
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...