C#OpenXML-将图表从Word文档复制到另一个Word文档

时间:2020-02-21 03:08:34

标签: c# ms-word openxml openxml-sdk

我试图将图表从一个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);


                    }

                }

            }
        }

1 个答案:

答案 0 :(得分:0)

Open XML SDK生产率工具在故障排除方面有很大帮助。我可以通过以下方式添加图表:

  1. 创建ChartPart对象
  2. 克隆原始图表ChartSpace并将其添加到我的ChartPart
  3. 按顺序创建一个具有ChartReference的Drawing对象,该对象具有与我的ChartPart相同的ID 链接他们
  4. 在插入书签之前,将Drawing对象添加到新的运行段和段落中

我确实浪费了一些时间,这是由于图表中的数据链接到excel文档所致,而我无法通过我的应用程序进行访问。为了显示图表,我必须通过以下方式打破外部数据关系: public function boot() { if (!$this->app->isLocal()) { $this->app['request']->server->set('HTTPS', true); } }

下面的代码以供将来参考

chartPart.AddExternalRelationship("http://schemas.openxmlformats.org/officeDocument/2006/ 
 relationships/oleObject", new System.Uri("NULL", System.UriKind.Relative), "rId2");
相关问题