C# 更新值后未刷新图表(即使是缓存的值)
我在这里读过几个关于这个主题的问题(都是4岁以上的孩子,所以…),没有人回答这个问题 以下是我更新图表的方法:C# 更新值后未刷新图表(即使是缓存的值),c#,charts,openxml,C#,Charts,Openxml,我在这里读过几个关于这个主题的问题(都是4岁以上的孩子,所以…),没有人回答这个问题 以下是我更新图表的方法: /// <summary>Collection of values to push in the chart.</summary> public IEnumerable<IEnumerable<string>> ChartValues { get; set; } protected void UpdateChar
/// <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++;
}
}
///要推入图表的值的集合。
公共IEnumerable图表值{get;set;}
受保护的void UpdateChart()
{
var part=_word.MainDocumentPart.ChartParts.First();
SpreadsheetDocument spread=SpreadsheetDocument.Open(part.EmbeddedPackagePart.GetStream(),true);
var sheet=spread.WorkbookPart.Workbook.WorkbookPart.WorksheetParts.First()工作表;
var-rowId=2;
var cells=sheet.subjections();
//更改嵌入的Excel单元格(/word/embeddings)
//逐行模式:B2至G2;B3至G3。。。
foreach(ChartValues中的var chartValue)
{
var columnId='B';
foreach(chartValue中的var cellValue)
{
var cellId=string.Concat(columnId,rowId);
var cell=cells.First(c=>c.CellReference==cellId);
cell.DataType=XLS.CellValues.Number;
cell.CellValue=新的XLS.CellValue(CellValue);
columnId++;
}
rowId++;
}
spread.Close();
spread.Dispose();
//同时更改缓存的单元格(/word/chart)
//逐列模式:B2到B8;C2到C8。。。
var cachedValues=part.ChartSpace.subjects();
int行=0;
int col=0;
foreach(cachedValue中的var cachedValue)
{//B列;C列;D列
行=0;
foreach(cachedValue.subjects()中的var值)
{//按行;
value.Text=ChartValues.ElementAt(行)。ElementAt(列);
行++;
}
col++;
}
}
打开生成的Word文档时,图表仍然为空。
进入图表选项并单击“选择数据”>“确定”或“编辑数据”时,内容将刷新,并显示所有数据
知道为什么图表没有刷新吗?回答我自己,我唯一错过的就是保存对图表空间的修改 添加:
part.ChartSpace.Save();
完成此操作后,图表将很好地刷新