更新值后图表不刷新(即使是缓存的)

Chart not refreshing after updating values (even cached one)

我在这里阅读了几个与该主题相关的问题(所有问题都至少 4 岁,所以...)但没有人回答这个问题。

这是我更新图表的方式:

    /// <summary>Collection of values to push in the chart.</summary>
    public IEnumerable<IEnumerable<string>> ChartValues { get; set; }

    protected void UpdateChart()
    {
        var part = _word.MainDocumentPart.ChartParts.First();
        SpreadsheetDocument spread = SpreadsheetDocument.Open(part.EmbeddedPackagePart.GetStream(), true);
        var sheet = spread.WorkbookPart.Workbook.WorkbookPart.WorksheetParts.First().Worksheet;
        var rowId = 2;
        var cells = sheet.Descendants<XLS.Cell>();
        // Change embedded Excel cell (/word/embeddings)
        // Row by row mode : B2 to G2 ; B3 to G3 ; ...
        foreach (var chartValue in ChartValues)
        {
            var columnId = 'B';
            foreach (var cellValue in chartValue)
            {
                var cellId = string.Concat(columnId, rowId);
                var cell = cells.First(c => c.CellReference == cellId);
                cell.DataType = XLS.CellValues.Number;
                cell.CellValue = new XLS.CellValue(cellValue);
                columnId++;
            }
            rowId++;
        }
        spread.Close();
        spread.Dispose();

        // Change cached cells as well (/word/chart)
        // Column by column mode : B2 to B8 ; C2 to C8 ; ...
        var cachedValues = part.ChartSpace.Descendants<Charts.Values>();
        int row = 0;
        int col = 0;
        foreach(var cachedValue in cachedValues)
        { // By column B ; C ; D
            row = 0;
            foreach( var value in cachedValue.Descendants<Charts.NumericValue>())
            { // By row ;
                value.Text = ChartValues.ElementAt(row).ElementAt(col); 
                row++;
            }
            col++;
        }
    }

打开生成的Word文档,图表还是空的。 进入图表选项并单击 "Select Data" > "OK" 或 "Edit Data" 时,内容会刷新并显示所有数据...

知道为什么图表没有刷新吗?

回答我自己,我唯一错过的就是将 ChartSpace 的修改也保存下来。

添加:

part.ChartSpace.Save();

成功了,图表刷新得很好。