在Excel中编辑embedded在Word文档中的Excel对象

我需要在Word文档中embeddedExcel文档。 我用这个问题的答案 – > 我怎样才能使用OpenXml 2.0embedded任何文件types到Microsoft Word ;

一切工作正常,除了:

DrawAspect = OVML.OleDrawAspectValues.Icon允许您通过打开一个新的Excel实例来编辑Excel对象。 但是,当我编辑数据时,它不在Word文档中更新。

DrawAspect = OVML.OleDrawAspectValues.Content使您可以直接在Word文档中编辑Excel对象。

我的问题是,我需要在代码中更改哪些内容才能编辑新实例中的Excel对象,并使其正确反映在Word文档中? 我尝试了一切都无济于事。

有些东西告诉我, DrawAspect = OVML.OleDrawAspectValues.Icon暗示该对象作为一个图标,并且变化不能正确地反映在这个图标。

你可以尝试一下我在这里提出的方法:

如何在使用OpenXML书签后在WORD中插入图像 。

简而言之,使用Open XML SDK 2.0生产力工具(这是Open XML SDK 2.0的一部分)。 在MS Word中手动进行文档处理。 然后在Open XML SDK 2.0生产力工具中打开这个文件。 然后find您感兴趣的编辑,看看它是如何以OpenXML格式表示的, 以及如何执行该编程

希望有所帮助!


更新:


好的 – 我现在有了更好的解决scheme,所以除了上面的build议,我还是build议你在MSDN论坛上看看这个主题:

  • 如何修改提供图表数据的Word文档中的embedded式Excel
  • Word中embeddedExcel表

我让自己转发代码示例(由Ji Zhou在MSDN论坛上发布),以避免在那里删除原始线程。

希望足以从Word中检索Excel对象,更改一些单元格并将其embedded到Word中。

 public static void Main() { using (WordprocessingDocument wDoc = WordprocessingDocument.Open(@"D:\test.docx", true)) { Stream stream = wDoc.MainDocumentPart.ChartParts.First().EmbeddedPackagePart.GetStream(); using (SpreadsheetDocument ssDoc = SpreadsheetDocument.Open(stream, true)) { WorkbookPart wbPart = ssDoc.WorkbookPart; Sheet theSheet = wbPart.Workbook.Descendants<Sheet>(). Where(s => s.Name == "Sheet1").FirstOrDefault(); if (theSheet != null) { Worksheet ws = ((WorksheetPart)(wbPart.GetPartById(theSheet.Id))).Worksheet; Cell theCell = InsertCellInWorksheet("C", 2, ws); theCell.CellValue = new CellValue("5"); theCell.DataType = new EnumValue<CellValues>(CellValues.Number); ws.Save(); } } } } private static Cell InsertCellInWorksheet(string columnName, uint rowIndex, Worksheet worksheet) { SheetData sheetData = worksheet.GetFirstChild<SheetData>(); string cellReference = columnName + rowIndex; Row row; if (sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).Count() != 0) { row = sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).First(); } else { row = new Row() { RowIndex = rowIndex }; sheetData.Append(row); } if (row.Elements<Cell>().Where(c => c.CellReference.Value == columnName + rowIndex).Count() > 0) { return row.Elements<Cell>().Where(c => c.CellReference.Value == cellReference).First(); } else { Cell refCell = null; foreach (Cell cell in row.Elements<Cell>()) { if (string.Compare(cell.CellReference.Value, cellReference, true) > 0) { refCell = cell; break; } } Cell newCell = new Cell() { CellReference = cellReference }; row.InsertBefore(newCell, refCell); worksheet.Save(); return newCell; } }