2014-10-06 4 views
1

У меня есть сценарий, в котором у меня есть Datagrid в моем приложении Silverlight, и я хочу, чтобы данные были экспортированы в Power Point.Создать таблицу с использованием OpenXML в powerpoint

Я исследовал и нашел только ссылки, чтобы экспортировать изображение (захваченный экран) в powerpoint. В моем сценарии захват экрана также не работает, поскольку у меня есть полоса прокрутки с 20 столбцами, и она не отображается с указанным выше решением.

Любая работа вокруг этого сценария.

P.S: Я не намерен использовать любые сторонние элементы управления.

Edit:

Я теперь пытался использовать OpenXML, но я получаю сообщение об ошибке, как показано ниже: enter image description here

Мой код, как показано ниже:

  using A = DocumentFormat.OpenXml.Drawing; 
     using P14 = DocumentFormat.OpenXml.Office2010.PowerPoint; 
     using System; 
     using System.Collections.Generic; 
     using System.Linq; 
     using System.Text; 
     using DocumentFormat.OpenXml; 

     using DocumentFormat.OpenXml.Packaging; 
     using DocumentFormat.OpenXml.Presentation; 
     using P = DocumentFormat.OpenXml.Presentation; 
     using D = DocumentFormat.OpenXml.Drawing; 
     using DocumentFormat.OpenXml.Drawing; 

     public static void CreateTableInLastSlide(PresentationDocument presentationDocument) 
    { 
     // Get the presentation Part of the presentation document 
     PresentationPart presentationPart = presentationDocument.PresentationPart; 

     // Get the Slide Id collection of the presentation document 
     var slideIdList = presentationPart.Presentation.SlideIdList; 

     if (slideIdList == null) 
     { 
      throw new NullReferenceException("The number of slide is empty, please select a ppt with a slide at least again"); 
     } 

     // Get all Slide Part of the presentation document 
     var list = slideIdList.ChildElements 
        .Cast<SlideId>() 
        .Select(x => presentationPart.GetPartById(x.RelationshipId)) 
        .Cast<SlidePart>(); 

     // Get the last Slide Part of the presentation document 
     var tableSlidePart = (SlidePart)list.Last(); 

     // Declare and instantiate the graphic Frame of the new slide 

     P.GraphicFrame graphicFrame = tableSlidePart.Slide.CommonSlideData.ShapeTree.AppendChild(new P.GraphicFrame()); 

     ApplicationNonVisualDrawingPropertiesExtension applicationNonVisualDrawingPropertiesExtension = new ApplicationNonVisualDrawingPropertiesExtension(); 
     P14.ModificationId modificationId1 = new P14.ModificationId() { Val = 3229994563U }; 
     modificationId1.AddNamespaceDeclaration("p14", "http://schemas.microsoft.com/office/powerpoint/2010/main"); 
     applicationNonVisualDrawingPropertiesExtension.Append(modificationId1); 
     graphicFrame.NonVisualGraphicFrameProperties = new DocumentFormat.OpenXml.Presentation.NonVisualGraphicFrameProperties 
     (new A.NonVisualDrawingProperties() { Id = 5, Name = "table 1" }, 
     new A.NonVisualGraphicFrameDrawingProperties(new A.GraphicFrameLocks() { NoGrouping = true }), 
     new ApplicationNonVisualDrawingProperties(new ApplicationNonVisualDrawingPropertiesExtensionList(applicationNonVisualDrawingPropertiesExtension))); 

     graphicFrame.Transform = new Transform(new Offset() { X = 10, Y = 10 }); 
     graphicFrame.Graphic = new A.Graphic(new A.GraphicData(GenerateTable()) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/table" }); 
     presentationPart.Presentation.Save(); 

    } 


    private static A.Table GenerateTable() 
    { 
     string[,] tableSources = new string[,] { { "name", "age" }, { "Tom", "25" } }; 

     // Declare and instantiate table 
     A.Table table = new A.Table(); 

     // Specify the required table properties for the table 
     A.TableProperties tableProperties = new A.TableProperties() { FirstRow = true, BandRow = true }; 
     A.TableStyleId tableStyleId = new A.TableStyleId(); 
     tableStyleId.Text = "{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}"; 

     tableProperties.Append(tableStyleId); 

     // Declare and instantiate tablegrid and colums 
     A.TableGrid tableGrid1 = new A.TableGrid(); 
     A.GridColumn gridColumn1 = new A.GridColumn() { Width = 3048000L }; 
     A.GridColumn gridColumn2 = new A.GridColumn() { Width = 3048000L }; 

     tableGrid1.Append(gridColumn1); 
     tableGrid1.Append(gridColumn2); 
     table.Append(tableProperties); 
     table.Append(tableGrid1); 
     for (int row = 0; row < tableSources.GetLength(0); row++) 
     { 
      // Instantiate the table row 
      A.TableRow tableRow = new A.TableRow() { Height = 370840L }; 
      for (int column = 0; column < tableSources.GetLength(1); column++) 
      { 
       tableRow.Append(CreateTextCell(tableSources.GetValue(row, column).ToString())); 
      } 

      table.Append(tableRow); 
     } 

     return table; 
    } 

Am я с помощью правильная графика и преобразование? линии, которая вызывает проблему в соответствии с меня:

P.GraphicFrame graphicFrame = tableSlidePart.Slide.CommonSlideData.ShapeTree.AppendChild(new P.GraphicFrame()); 

Как будто я комментировать свою линию я не не получаю ошибку, но ни я получаю таблицу: о/ Любой помощи?

+0

Идеи: Если office.interop установлены на сервере, вы можете создать веб-метод для получения/принятия данных, а затем создать файл PP. Считаете ли вы, что MS Office является третьей стороной? – Steve

+0

Нет, я намерен использовать только MS Office. Спасибо, я дам ему попробовать !!! – adityaswami89

ответ

0

Наконец-то я смог решить проблему, используя инструмент повышения производительности Open XML (here). Выделенная строка была ошибкой. Мне нужно добавить следующий код:

List<OpenXmlElement> elements = new List<OpenXmlElement>(); 
     elements.Add(new P.NonVisualGraphicFrameProperties 
      (new P.NonVisualDrawingProperties() { Id = 1, Name = "xyz" }, new P.NonVisualGraphicFrameDrawingProperties(),new ApplicationNonVisualDrawingProperties())); 



     P.GraphicFrame graphicFrame = tableSlidePart.Slide.CommonSlideData.ShapeTree.AppendChild(new P.GraphicFrame(elements)); 

Таким образом, я был в состоянии получить выход без ошибок :)

+0

Привет Aditya, мне нужно добавить данные из набора данных в формате таблицы в отчете PPTX. У меня есть шаблон, где у меня есть 4 заполнителя, где мне нужно заполнить 4 таблицы данных. В настоящее время я использую этот шаблон для создания нового слайда и замены заполнителя для текста, но для таблиц я не мог понять. Я могу генерировать таблицу, но не в месте размещения. Не могли бы вы дать мне знать. благодаря – Sak

Смежные вопросы