...
- Create a PowerPointApplication object.
Code Block PowerPointApplication ppta = new PowerPointApplication();
- Set a Presentation object to our template file. This allows us to use all of the methods in the PowerPointApplication API including Slides.CopySlide.
The following steps will create 3 copies of the last slide.Code Block Presentation pres = ppta.Open(Page.MapPath("//templates//part3_template.pptx"));
- Create a Slide object for the last slide in our template.
Code Block Slide slideToCopy = pres.Slides[7];
- Call Slides.CopySlide three times, with each call placing the new slide at the end of the presentation.
Now that our presentation contains all of the slides we want, we can pass it to PowerPointTemplate to import the data. See Passing Between Template and Application for more information.Code Block pres.Slides.CopySlide(slideToCopy, (pres.Slides.Count)); pres.Slides.CopySlide(slideToCopy, (pres.Slides.Count)); pres.Slides.CopySlide(slideToCopy, (pres.Slides.Count));
We will reuse the code from Part 1 and Part 2 of this tutorial. We will take out the Save call and add then our new code for Part 3.Code Block PowerPointTemplate pptt = new PowerPointTemplate(); pptt.Open(ppta, pres);
Next, we will bind the data for the slides that were added in part 3.Code Block //Code from Part 1 PowerPointTemplate pptt = new PowerPointTemplate(); pptt.Open(Page.MapPath("//templates//part1_template.pptx")); DataBindingProperties dataProps = pptt.CreateDataBindingProperties(); string[] columnNamesArray = {"Logo"}; Byte[] logoArray = System.IO.File.ReadAllBytes((Page.MapPath("//data//logo.png"))); object[] valuesArray = {logoArray}; pptt.BindData(valuesArray, columnNamesArray, "Company", dataProps); string[] employeeColNames = {"Name", "Team"}; object[] employeeValues = {"Amy Alberts", "Development"}; pptt.BindData(employeeValues, employeeColNames, "Employee", dataProps); DataTable teamData = GetCSVData((Page.MapPath("//data//Team.csv"))); pptt.BindData(teamData, "Team", dataProps); //Code from Part 2 DataTable dtCompanyHistory = GetCSVData(Page.MapPath("//data//CompanyHistory.csv")); dataProps.MaxRowsPerSlide = 5; pptt.BindData(dtCompanyHistory, "CompanyHistory", dataProps); DataTable dtProducts = GetCSVData(Page.MapPath("//data//Products.csv")); DataBindingProperties dataProps2 = pptt.CreateDataBindingProperties(); dataProps2.MaxRowsPerSlide = 2; pptt.BindData(dtProducts, "Products", dataProps2);
- Create an array containing the string "TrainingItem". Becuase all of our remaining slides use the same data markers, this array can be used as the column names array for multiple BindData calls.
Code Block string[] titleCol = { "TrainingItem" };
- Get the data for the first slide in the 'Your Team' section of the presentation. The title of this slide is 'Team Members'.
In order to keep the 'Team Members' data from populating all of our copied slides, we need to set the Slide property to scope to the slide we want. In this case, it is the 8th slide in our presentation.Code Block //Data for the TrainingItem data source object[] titleArrayTeam = { "Team Members" }; //Get the Team members data DataTable dtTeamMembers = GetCSVData(Page.MapPath("//data//TeamMembers.csv"));
- Set the dataProps Slide property to be 7. Slide uses the 0-indexed position of the slide, so this will scope to slide 8.
Code Block dataProps.Slide = 7;
- Bind the 'Team Members' data to the presentation. This will take two BindData calls, for the two data sources on the slide.
Code Block pptt.BindData(titleArrayTeam, titleCol, "Department", dataProps); pptt.BindData(dtTeamMembers, "TrainingItems", dataProps);
- Follow these same steps for the remaining slides. Make sure to change the Slide property before each BindData call. The same DataBindingProperties object can be used for all the BindData calls.
Code Block //The 9th slide will be 'Agile Development / Scrum' object[] titleArrayAgile = { "Agile Development / Scrum" }; DataTable dtAgile = GetCSVData(Page.MapPath("//data//Agile.csv")); dataProps.Slide = 8; pptt.BindData(titleArrayAgile, titleCol, "Department", dataProps); pptt.BindData(dtAgile, "TrainingItems", dataProps); //The 10th slide will be 'REsourcesResources and Utilities' object[] titleArrayResources = { "Resources and Utilities" }; DataTable dtResources = GetCSVData(Page.MapPath("//data//Resources.csv")); dataProps.Slide = 9; pptt.BindData(titleArrayResources, titleCol, "Department", dataProps); pptt.BindData(dtResources, "TrainingItems", dataProps); //The final slide will be 'Expectations' object[] titleArrayExpectations = { "Expectations" }; DataTable dtExpectations = GetCSVData(Page.MapPath("//data//Expectations.csv")); dataProps.Slide = 10; pptt.BindData(titleArrayExpectations, titleCol, "Department", dataProps); pptt.BindData(dtExpectations, "TrainingItems", dataProps);
- Finally, Process and Save the finished presentation. Congratulations, the tutorial is complete!
Code Block pptt.Process(); pptt.Save(Page.Response, "part3_OutPut.pptx", false);
...