我正在尝试将图表从一个word文档复制到另一个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);
}
}
}
}
发布于 2020-02-26 13:12:30
我可以通过以下方式添加图表:
将绘图对象附加到新的管段和段落,然后再插入到书签
我确实有一个浪费了一点时间的问题,这是由于图表中的数据被链接到一个excel文档,而我无法通过我的应用程序访问该文档。为了显示图表,我必须通过以下方式打破外部数据关系:chartPart.AddExternalRelationship("http://schemas.openxmlformats.org/officeDocument/2006/ relationships/oleObject", new System.Uri("NULL", System.UriKind.Relative), "rId2");
using (WordprocessingDocument doc = WordprocessingDocument.Open(SourceDoc, false))
{
//List<ChartPart> chartFind = doc.MainDocumentPart.ChartParts.ToList();
//List<Drawing> drawingList = doc.MainDocumentPart.Document.Descendants<Drawing>().ToList();
MainDocumentPart mainPartDoc = doc.MainDocumentPart;
var mainDoc = mainPartDoc.Document;
using (WordprocessingDocument copydoc = WordprocessingDocument.Open(stream, true))
{
MainDocumentPart mainPart = copydoc.MainDocumentPart;
var document = mainPart.Document;
var bmStart = document.Descendants<BookmarkStart>();
var bmEnd = document.Descendants<BookmarkEnd>();
foreach (BookmarkStart bookMarkStart in bmStart)
{
if (bookMarkStart.Name == "test")
{
//find charts and names from original document
List<ChartPart> findCharts = mainPartDoc.ChartParts.ToList();
var partCheck = (from f in findCharts
select f.ChartSpace.GetFirstChild<Chart>().Title.InnerText).ToList();
ChartPart chartPart = mainPart.AddNewPart<ChartPart>();
ChartPart chartSelect = findCharts[3];
//ChartPart chartSelect = mainPartDoc.ChartParts.FirstOrDefault();
chartPart.ChartSpace = (ChartSpace)chartSelect.ChartSpace.Clone();
string relId = mainPart.GetIdOfPart(chartPart);
AutoUpdate autoUpdate1 = new AutoUpdate() { Val = false };
chartPart.AddExternalRelationship("http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject",
new System.Uri("NULL", System.UriKind.Relative), "rId2");
Paragraph paragraph = new Paragraph();
Drawing drawing = new Drawing();
Run run = new Run();
Inline inline = new Inline() { DistanceFromTop = (UInt32Value)0U, DistanceFromBottom = (UInt32Value)0U, DistanceFromLeft = (UInt32Value)0U, DistanceFromRight = (UInt32Value)0U, AnchorId = "716A168E", EditId = "2D11B07F" };
Extent extent = new Extent() { Cx = 6572250L, Cy = 2586038L };
EffectExtent effectExtent1 = new EffectExtent() { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 5080L };
DocProperties docProperties1 = new DocProperties() { Id = (UInt32Value)13U, Name = "Chart 13" };
NonVisualGraphicFrameDrawingProperties nonVisualGraphicFrameDrawingProperties1 = new NonVisualGraphicFrameDrawingProperties();
dr.Graphic graphic = new dr.Graphic();
graphic.AddNamespaceDeclaration("a", "http://schemas.openxmlformats.org/drawingml/2006/main");
dr.GraphicData graphicData = new dr.GraphicData() { Uri = "http://schemas.openxmlformats.org/drawingml/2006/chart" };
ChartReference chartReference1 = new ChartReference() { Id = relId };
chartReference1.AddNamespaceDeclaration("c", "http://schemas.openxmlformats.org/drawingml/2006/chart");
chartReference1.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
graphicData.Append(chartReference1);
graphic.Append(graphicData);
inline.Append(extent);
inline.Append(effectExtent1);
inline.Append(docProperties1);
inline.Append(nonVisualGraphicFrameDrawingProperties1);
inline.Append(graphic);
drawing.Append(inline);
run.Append(drawing);
paragraph.Append(run);
var id = bookMarkStart.Id.Value;
var bookmarkEnd = bmEnd.Where(i => i.Id.Value == id).First();
bookmarkEnd.Parent.InsertAfterSelf(paragraph);
// mainPart.Document.Body.Append(paragraph);
}
}
}
https://stackoverflow.com/questions/60331639
复制相似问题