Как скопировать диаграмму из Excel в Word с помощью OpenXml SDK? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть файл Excel с одним листом и одним графиком. Я пытаюсь скопировать эту диаграмму и вставить ее в новый документ Word с помощью OpenXml SDK. Я не хочу изображение диаграммы, но редактируемый объект диаграммы, не связанный с файлом 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
     }
}

Я пытался взять ChartPartиз Excel и добавив его в документ Word, а затем создать новую диаграмму, ссылающуюся на вставленный новый ChartPart. К сожалению, я застрял на этом шаге. Как я могу получить и использовать эту ссылку для создания диаграммы? Иначе есть ли другой способ скопировать диаграмму из Excel в Word?

Заранее спасибо.

1 Ответ

0 голосов
/ 04 октября 2019

Я нашел этот обходной путь для копирования диаграммы из Excel в Word:

  1. Создание новой диаграммы ChartPart в документе Word.
  2. Добавьте к этой диаграмме ChartSpace, клонированную из Excel.
  3. Добавить новую диаграмму в документ Word со ссылкой на новый ChartPart.

Это код:

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);
    }
}
...