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
相关产品推荐
相关产品推荐

