Вы можете попробовать способ, который я здесь проставил:
Как вставить изображение в WORD после закладки с помощью OpenXML .
Короче говоря, используйте инструмент повышения производительности Open XML SDK 2.0 (который является частью Open XML SDK 2.0). Делайте все, что вам нужно сделать с документом вручную в MS Word Затем откройте этот файл в инструменте повышения производительности Open XML SDK 2.0. Затем найдите интересующие вас правки, чтобы увидеть, как они представлены в формате OpenXML , а также как это сделать программно .
Надеюсь, это поможет!
ОБНОВЛЕНО:
Хорошо, теперь мне стало лучше, в чем проблема ... Поэтому в дополнение к моему совету, приведенному выше, я бы порекомендовал вам ознакомиться с этой темой на форуме MSDN:
Я позволил себе перепостить пример кода (опубликованный на MSDN Forum Ji Zhou ) только для того, чтобы избежать удаления там оригинальной темы.
Надеюсь, это достаточно полезно для извлечения объекта Excel из Word, изменения некоторых ячеек и встраивания его обратно в 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;
}
}