更新值后图表不刷新(即使是缓存的)
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();
成功了,图表刷新得很好。
我在这里阅读了几个与该主题相关的问题(所有问题都至少 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();
成功了,图表刷新得很好。