1

我通过加载模板和更新数据并保存为新副本来创建 PowerPoint。为此,我正在使用 GemBox.Presentation 和 GemBox.SpreadSheet。我可以使用电子表格访问图表数据,但我不知道如何更新它。
这是我从模板幻灯片访问图表的方式。

var chart = ((GraphicFrame)currentSlide.Content.Drawings[0]).Chart;
var stackedColumn = (GemBox.Spreadsheet.Charts.ColumnChart)chart.ExcelChart;

我试图通过转换为列表来更新数据,但它仍然没有更新。

foreach (var item in data)
{
     var seriesItem = data;
     var valueList = item.Values.Cast<int>().Select(x => x).ToList();
     
    // values to update in chart
     List<int> myValues = new List<int>(new int[] { 1, 2});

     for (int v = 0; v < valueList.Count(); v++)
     {
        valueList[v] = myValues[v];
     }
}

我还看到了这个示例https://www.gemboxsoftware.com/presentation/examples/powerpoint-charts/412来更新图表,但是这会添加系列但不会更新当前数据。如果您可以共享此组件是否有任何支持来执行更新图表数据,我们将不胜感激。谢谢

4

2 回答 2

1

一种方法是使用其中一种ChartSeries.SetValues方法,如上一个答案中所述。

另一种方法是更新带下划线的 Excel 单元格。
例如,在您链接到的那个示例中,您可以这样做:

var lineChart = (LineChart)chart.ExcelChart;
var lineSeries = lineChart.Series[0];

// Get series source cells.
string[] cellsReference = lineSeries.ValuesReference.Split('!');
var cells = lineChart.Worksheet.Parent.Worksheets
    .First(w => w.Name == cellsReference[0].Trim('\''))
    .Cells.GetSubrange(cellsReference[1]);

// Update cells with doubled values.
foreach (var cell in cells)
    cell.SetValue(cell.DoubleValue * 2);
于 2021-11-18T08:03:56.283 回答
0

我设法更新了与 powerpoint 图表关联的电子表格上的数据。

名为 ChartSeries 的类包含名为 SetValues() 的方法,该方法将设置图表系列值。有两种方法可以使用此方法,因为它需要IEnumerableObject []作为参数,如下所示。

public void SetValues(IEnumerable values)

public void SetValues(params object[] values)

这就是我如何访问该值并对其进行更新。

foreach (var item in data)
 {
  var seriesItem = data;
  foreach (var value in seriesItem)
    {
      if (value.DisplayName == "[Open]")
       {
         value.SetValues(50,25);
       }
    }
}                              
于 2021-11-17T23:09:34.850 回答