Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新值后未刷新图表(即使是缓存的值)_C#_Charts_Openxml - Fatal编程技术网

C# 更新值后未刷新图表(即使是缓存的值)

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

我在这里读过几个关于这个主题的问题(都是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++;
        }
    }
///要推入图表的值的集合。
公共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();
完成此操作后,图表将很好地刷新