【发布时间】:2020-02-26 13:12:30
【问题描述】:
我试图将图表从一个 word 文档复制到另一个,并使用 OpenXml 将它们放置在书签位置。但是我不确定如何将复制的图表附加或插入到书签中。我相信在将图表对象添加到段落之前,我必须将其添加到绘图或其他对象中,但我无法让它工作。下面的代码是我用来测试的基础:
using (WordprocessingDocument doc = WordprocessingDocument.Open(SourceDoc, false))
{
List<ChartPart> chartFind = doc.MainDocumentPart.ChartParts.ToList();
using (WordprocessingDocument copydoc = WordprocessingDocument.Open(stream, true))
{
MainDocumentPart mainPart = copydoc.MainDocumentPart;
Body body = mainPart.Document.GetFirstChild<Body>();
var bmStart = body.Descendants<BookmarkStart>();
var bmEnd = body.Descendants<BookmarkEnd>();
//phone calls Chart
ChartPart PhoneChart = chartFind[0];
ChartPart chartPart = mainPart.AddNewPart<ChartPart>();
chartPart.ChartSpace = (ChartSpace)PhoneChart.ChartSpace.Clone();
foreach (BookmarkStart bookMarkStart in bmStart)
{
if (bookMarkStart.Name == "test")
{
var id = bookMarkStart.Id.Value;
var bookmarkEnd = bmEnd.Where(b => b.Id.Value == id).First();
Paragraph chartPara = new Paragraph();
bookmarkEnd.Parent.InsertAfterSelf(chartPara);
chartPara.InsertAfterSelf(chartPart.ChartSpace);
}
}
}
}
【问题讨论】:
-
图表是 docx zip 包中的附加 xml 部分。不可能简单地“复制/粘贴”:需要关系。我建议您从 1) 打开您正在使用的示例文档,然后按照您希望代码执行的操作将该图表复制/粘贴到书签中。 2)将此保存为新文件名并关闭...
-
...3) 在 Open XML SDK Productivity Tool 中打开原始文档。花点时间查看底层的 xml 文件,尤其是文档的 BODY,即图表所在的位置。现在使用“比较”功能引入第二个文件。查看生成的代码以将第一个转换为第二个。这将使您了解如何在新图表中插入和链接。
标签: c# ms-word openxml openxml-sdk