2013-03-13 2 views
2

openxml을 사용하여 웹 응용 프로그램에서 파워 포인트를 작성했습니다. 차트로 ppt를 작성하고 생성 된 openxml sdk 생산성 도구 및 코드에 ppt를 열었습니다 내가 데이터베이스에서 오는 차트 데이터를 수정 한 것으로, 코드하는 내가오픈 XML을 사용하여 Powerpoint의 기존 테이블에 데이터 폼 데이터베이스를 바인딩하는 방법

으로 차트 데이터를 수정하기 위해 만든 그 CreatePart에서 SDK의 코드에 대한 클래스를 생성() 나는이 링크를

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

확실히, 당신이 나에게 당신의 코드 ID를 보낼 수 있습니까? –

답변

3

나는 내가 OPENXML에게 행을 추가 테이블 사이에 추가 (조건 경우)

아래의 코드를 사용하여 데이터베이스에서 테이블 값을 업데이트 할 수있어 연구 후 답을 발견하고

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); 
를 추가 graphicdata

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

안녕 Dinesh, 나는 PPTX 보고서의 테이블 형식으로 데이터 세트의 데이터를 추가해야합니다. 4 개의 다른 데이터 테이블을 채울 필요가있는 4 개의 자리 표시자가있는 템플릿이 있습니다. 현재이 템플릿을 사용하여 새로운 슬라이드를 만들고 텍스트의 자리 표시자를 대체하지만 테이블을 찾을 수는 없습니다. 너 내게 알려주시겠습니까? 감사 – Sak