You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NET 6/7/8下OpenXML更新Word图表不生效问题求助

问题:OpenXML更新Word嵌入式图表数据后图表不刷新(Azure环境无法使用Word Interop)

开发的应用需填充Word文档文本并更新图表,目前已通过OpenXML完成其他功能,但图表无法更新——嵌入式Excel数据已成功更新,图表本身却无变化,推测需刷新相关缓存。由于应用将部署在Azure环境中,无法使用Word Interop,恳请提供解决方案。

相关代码如下:

private static void PopulateChart(WordprocessingDocument document, string contentControlName, List<List<decimal>> cellValues)
{
    // Find drawing by alternative name
    var drawing = document.MainDocumentPart?.Document.Body?.Descendants<Drawing>()
        .FirstOrDefault(d => d.Inline?.DocProperties?.Description?.Value == contentControlName);

    // Get the chart reference
    var chartRef = drawing?.Descendants<ChartReference>().FirstOrDefault();

    // Make sure the chart exists
    if (chartRef == null || string.IsNullOrWhiteSpace(chartRef.Id))
    {
        // TODO ADD SERILOG
        throw new ArgumentNullException($"Chart {contentControlName} not found or does not have a reference.");
    }
    
    var chartId = chartRef.Id.ToString()!;
    var chartPart = (ChartPart) document.MainDocumentPart?.GetPartById(chartId)!;
    
    var embeddedExcel = chartPart.EmbeddedPackagePart!;

    if (embeddedExcel == null)
    {
        throw new ArgumentNullException($"Chart {contentControlName} embedded Excel resource not found.");
    }

    using var stream = embeddedExcel.GetStream();
    using var excelDoc = SpreadsheetDocument.Open(stream, true);

    // Get the worksheet part by name or index
    var workbookPart = excelDoc.WorkbookPart!;
    var worksheetPart = workbookPart.WorksheetParts.First();
    
    // Load cell data.
    var cells = worksheetPart.Worksheet
        .Descendants<Cell>()
        .ToArray();
    
    // Start from row 2
    var rowIndex = 2;
    
    foreach (var row in cellValues)
    {
        // Column number
        var columnLetterNumericalIndex = 0;
        
        foreach (var column in row)
        {
            var cellReference = $"{GetColumnName(columnLetterNumericalIndex)}{rowIndex}";
            cells.Single(c => c.CellReference == cellReference).CellValue = new CellValue(column);
            columnLetterNumericalIndex++;
        }
        
        rowIndex++;
    }

    // Save the changes to the spreadsheet
    chartPart.ChartSpace.Save();
    worksheetPart.Worksheet.Save();

    // Document is saved higher up (document.Save())
}

内容的提问来源于stack exchange,提问作者RealBercik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:32:27