2011-08-06 21 views
1

私はC#アプリケーションからExcelでいくつかのチャートを作成しようと数時間を費やしました。私は複数のチャートオブジェクトを作成しようとしています。これを行うより良い方法はありますか?私は、 "chartObject [col] =(Excel.Chart)oWB.Charts.Add(Missing.Value、Missing.Value、Missing.Value、Missing.Value)という行を"私が間違っているところです。複数のExcelチャートオブジェクトを作成するC#

私はこの行を呼び出すと、最後のグラフのコピーを作成することがありますが、時にはそれが動作することもあります。私はそれに対する論理を全く理解できません。

おかげ

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]; 
     } 
    } 
+0

私は思ったんだけどは、 ASP.NETのチャートコントロールを使用する場合に役立ちます。またはこれをExcelに配置する必要がありますか?チャートコントロールはチャートをウェブページに置くことができます。私は約1年前にこれを設定しました。あなたに質問がある場合は、私に教えてください。 http://archive.msdn.microsoft.com/mschartまた、Sencha extjsフレームワークをチャート作成に使用することもできます(http://www.sencha.com)。 – MacGyver

+0

Excel用にどのライブラリを使用しているか教えてください。また、(メソッドの最初のパラメータに基づいて)ワークブックとワークシートを取得するコードを提供できる場合は、それも役に立ちます。 – MacGyver

答えて

0

問題は、チャート自体がChartObjectにオブジェクトであり、あなたはそれがだ形状オブジェクトを使用しながらExcelでチャートオブジェクトは、実際にグラフシートであることも、私のそれを処理するために。ここでa linkだし、それについてabitのをtalke another one、およびそれの少しを示しthis MS linkからいくつかのVBAコードは、それを成し遂げるためにいくつかの異なる方法があることに注意してください。

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 
+0

ありがとう、私はあなたのリンクの情報のいくつかを使用して最後にそれを働いた。 – paulm

+0

実際には、* Chart *はチャートシートに表示されるチャート(チャートシートは* Chart *オブジェクト)または* ChartObject *内の別のシートに埋め込まれたチャートです。特殊な* Shape *あなたのコードサンプルでは、​​objShapeをChartObjectとして宣言した場合、チャートが含まれているかどうかをチェックする必要はありません。 –

+0

@ジョン、私は同意する、私は通常も直接ChartObjectを使用します。私はいつかより良いコードサンプルを思いつくことができるかどうかを見ていきます。 –

関連する問題