2017-04-22 122 views
0

我已经阅读了几个关于这个问题的问题(至少都是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文档,图表仍然是空的。 当进入图表选项并点击“选择数据”>“确定”或“编辑数据”时,内容被刷新并显示所有数据...

任何想法为什么图表不刷新?

回答

1

回答我自己,我唯一想错过的就是保存ChartSpace的修改。

添加:

part.ChartSpace.Save(); 

的伎俩,图表以及刷新。