我有一个包含一张纸和一张图表的Excel文件。我正在尝试复制此图表并将其粘贴到使用OpenXml SDK的新Word文档中。我不想要图表的图像,而是想要一个未引用Excel文件的可编辑图表对象。
这是我尝试过的:
using (SpreadsheetDocument document = SpreadsheetDocument.Open("Test1.xlsx", true))
{
var bkPart = document.WorkbookPart;
var workbook = bkPart.Workbook;
var s = workbook.Sheets.FirstOrDefault();
var wsPart = bkPart.WorksheetParts.FirstOrDefault();
var dp = wsPart.DrawingsPart;
var dWs = dp.WorksheetDrawing;
var cp = dp.ChartParts.FirstOrDefault();
var plotArea = cp.ChartSpace.Descendants<PlotArea>().FirstOrDefault();
using (var docx = WordprocessingDocument.Open("Test1.docx", true))
{
docx.MainDocumentPart.Document.Body.RemoveAllChildren();
var cpw = docx.MainDocumentPart.AddPart(cp);
var p = new DocumentFormat.OpenXml.Wordprocessing.Paragraph();
var r = new Run();
var d = new Drawing();
var i = new Inline();
var g = new Graphic();
var gd = new GraphicData();
var c = new DocumentFormat.OpenXml.Drawing.Charts.Chart();
docx.MainDocumentPart.Document.Body.Append(p);
p.Append(r);
r.Append(d);
d.Append(i);
i.Append(g);
g.Append(gd);
gd.Append(c);
// I am stuck here
}
}
我试图从Excel中获取ChartPart,并将其添加到Word文档中,然后创建一个引用插入的新ChartPart的新图表。不幸的是,我坚持这一步骤。如何获得和使用此参考来创建图表?否则,还有另一种方法可以将图表从Excel复制到Word吗?
提前感谢。
我发现了这种解决方法,可以将图表从Excel复制到Word:
这是代码:
using (SpreadsheetDocument document = SpreadsheetDocument.Open("Test1.xlsx", true))
{
var bkPart = document.WorkbookPart;
var workbook = bkPart.Workbook;
var s = workbook.Sheets.FirstOrDefault();
var wsPart = bkPart.WorksheetParts.FirstOrDefault();
var dp = wsPart.DrawingsPart;
var dWs = dp.WorksheetDrawing;
var cp = dp.ChartParts.FirstOrDefault();
using (var docx = WordprocessingDocument.Open("Test1.docx", true))
{
MainDocumentPart mainPart = docx.MainDocumentPart;
ChartPart chartPart = mainPart.AddNewPart<ChartPart>("rId777");
chartPart.ChartSpace = (ChartSpace)cp.ChartSpace.Clone();
var paragraph = new DocumentFormat.OpenXml.Wordprocessing.Paragraph() { RsidParagraphAddition = "00C75AEB", RsidRunAdditionDefault = "000F3EFF" };
Run run = new Run();
Drawing drawing = new Drawing();
Inline inline = new Inline();
inline.Append(new Extent() { Cx = 5274310L, Cy = 3076575L });
DocProperties docPros = new DocProperties() { Id = (UInt32Value)1U, Name = "Chart7" };
inline.Append(docPros);
Graphic g = new Graphic();
var graphicData = new GraphicData() { Uri = "http://schemas.openxmlformats.org/drawingml/2006/chart" };
var chartReference = new ChartReference() { Id = "rId777" };
graphicData.Append(chartReference);
g.Append(graphicData);
inline.Append(g);
drawing.Append(inline);
run.Append(drawing);
paragraph.Append(run);
mainPart.Document.Body.Append(paragraph);
}
}