【问题标题】:Creating multiple Excel chart objects using c#使用 c# 创建多个 Excel 图表对象
【发布时间】:2011-08-06 18:01:39
【问题描述】:

我现在花了几个小时试图从我的 C# 应用程序在 Excel 中创建一些图表。我正在尝试创建多个图表对象。有没有更好的方法来做到这一点?我确定行“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];
        }
    }

【问题讨论】:

  • 我想知道使用 ASP.NET 的图表控件是否会对您有所帮助。或者你需要把它放到Excel中吗?图表控件可以将图表直接放在网页中。我大约一年前设置了这个,所以如果您有任何问题,请告诉我。 archive.msdn.microsoft.com/mschart 另一种选择是使用 Sencha extjs 框架来绘制图表 (sencha.com)。
  • 如果您告诉我您使用的 Excel 库是什么,我可能会回答您的问题。此外,如果您可以提供检索工作簿和工作表的代码(基于您方法中的第一个参数),那也会有所帮助。

标签: c# excel charts


【解决方案1】:

问题在于 Excel 中的 Chart 对象实际上是一个图表工作表,而图表本身是一个 ChartObject 对象,而您使用 Shape 处理它的对象。这里是 a linkanother 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

【讨论】:

  • 谢谢,我最终使用您链接中的一些信息解决了问题。
  • 实际上,Chart 要么是显示在图表工作表上的图表(图表工作表是 Chart 对象),要么是嵌入在 ChartObject 内的另一个工作表中的图表,这是一种特殊的 Shape。在您的代码示例中,如果您将 objShape 声明为 ChartObject,则不必检查它是否包含图表。
  • @Jon,我同意,我通常也直接使用 ChartObject。我会看看我是否可以在某个时候想出一个更好的代码示例。
  • Lance - 给我发一封电子邮件(peltiertech dot com 的 jon),我将发送一些简单的图表相关 vba 的 sn-ps。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多