2013-03-13 6 views
2

Я использую openxml для создания PowerPoint из веб-приложения. Я создал ppt с диаграммами и открыл ppt в инструменте и кодексе openxml sdk, который был сгенерирован с помощью что я изменил данные диаграммы, которые поступают из базы данных, код, для которого я создал, чтобы изменить данные диаграммы, какКак связать базу данных формы с существующей таблицей в powerpoint с помощью открытого xml

создал класс для кода в SDK, в том CreatePart() я добавил эти ссылки

ChartPart chartPart1 = slidePart1.AddNewPart<ChartPart>("rId3"); 
     GenerateChartPart1Content(chartPart1); 
     // This is below code added 
     #if true // Injects the chart part modification process 
        var chartModifier1 = new ChartPartModifier(); 
        chartModifier1.UpdateSecondChartPart(chartPart1); 
     #endif 

     EmbeddedPackagePart embeddedPackagePart1 = chartPart1.AddNewPart<EmbeddedPackagePart>("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "rId2"); 
     GenerateEmbeddedPackagePart1Content(embeddedPackagePart1); 

и создано для класса ChartPartModifier()

public void UpdateSecondChartPart(ChartPart chartPart) 
    { 
     // Searchs SeriesText and its Values to replace them with your dynamic data 
     var seriesLabels = chartPart.ChartSpace.Descendants<SeriesText>().ToList(); 
     var seriesValues = chartPart.ChartSpace.Descendants<Values>().ToList(); 
     var categoryAxis = chartPart.ChartSpace.Descendants<CategoryAxisData>().ToList(); 

     for (int i = 0; i < this._lineSecCharts.Count; ++i) 
     { 
      var yourLine = this._lineSecCharts[i]; 

      var label = seriesLabels[i].Descendants<NumericValue>().FirstOrDefault(); 
      var values = seriesValues[i].Descendants<NumericValue>().ToList(); 
      var categories = categoryAxis[i].Descendants<NumericValue>().ToList(); 

      // Replaces the label of the series 
      label.Text = yourLine.Label; 
      // Replaces the values of the series 
      for (int valIdx = 0; valIdx < values.Count(); ++valIdx) 
      { 
       values[valIdx].Text = yourLine.Plots[valIdx].Value.ToString(); 
       categories[valIdx].Text = yourLine.Plots[valIdx].Category; 
      } 
     } 
    } 

Как это есть, можно каким-либо образом изменить данные в таблице. Если это возможно, мне может быть предложено решение.

+0

Вы согласны предоставить код для создания PowerPoint с диаграммами из веб-приложения. Мне было бы интересно посмотреть на это? – Coops

+0

уверен, вы можете отправить мне свой почтовый идентификатор, я могу отправить вам код –

ответ

3

Я нашел ответ после исследования я могу обновить таблицы значений из базы данных с помощью OpenXml

ниже кода, который (если условие) добавляется между таблицей добавлением строк и graphicdata добавлением

table1.Append(tableProperties1); 
     table1.Append(tableGrid1); 
     table1.Append(tableRow1); 
     table1.Append(tableRow2); 
     table1.Append(tableRow3); 
     table1.Append(tableRow4); 
     table1.Append(tableRow5); 
     table1.Append(tableRow6); 
     table1.Append(tableRow7); 

#if true // Injects the table modification process 
     TableModifier tableModifier = new TableModifier();//Create a class 
     tableModifier.UpdateTable(table1);//Send the table object of which you wanted to update 
#endif 
     graphicData1.Append(table1); 

     graphic1.Append(graphicData1); 

В классе TableModifier

using DocumentFormat.OpenXml.Drawing; 
using DocumentFormat.OpenXml.Packaging; 

public class TableModifier 
{ 
    public TableModifier() 
    { 
     this.SetupDataSource(); 
    } 

    public void UpdateTable(Table table) 
    { 
     var rows = table.Descendants<TableRow>().ToList(); 

     for (int r = 0; r < rows.Count(); ++r) 
     { 
      var yourRow = this._rows[r]; 
      var cells = rows[r].Descendants<TableCell>().ToList(); 

      for (int c = 0; c < cells.Count(); ++c) 
      { 
       var yourCell = yourRow.Cells[c]; 
       var text = cells[c].Descendants<Text>().FirstOrDefault(); 
       if (text != null) 
       { 
        text.Text = yourCell.Value; 
       } 
      } 
     } 
    } 

    private void SetupDataSource() 
    { 
     this._rows.Add(new Row() 
     { 
      Cells = new List<Cell>() 
      { 
       new Cell(){ Value = "Products" }, 
       new Cell(){ Value = "2010" }, 
       new Cell(){ Value = "2011" }, 
       new Cell(){ Value = "2012" }, 
      } 
     }); 

     for (int i = 0; i < 6; ++i) 
     { 
      var productName = string.Format("Product {0}", (char)(i + 'A')); 

      this._rows.Add(new Row() 
      { 
       Cells = new List<Cell>() 
       { 
        new Cell(){ Value = productName }, 
        new Cell(){ Value = "10%" }, 
        new Cell(){ Value = "20%" }, 
        new Cell(){ Value = "30%" }, 
       } 
      }); 
     } 
    } 

    #region Private Data Structure 

    private class Row 
    { 
     public List<Cell> Cells { get; set; } 
    } 

    private class Cell 
    { 
     public string Value { get; set; } 
    } 

    #endregion 

    private List<Row> _rows = new List<Row>(); 
} 
+0

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

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

  • Нет связанных вопросов^_^