2012-04-25 1 views
1

У меня есть лист Excel с одной диаграммой, которая является источником. Моя цель - презентация PowerPoint с 3 слайдами. Мне нужно обновить слайд # 3 с помощью диаграммы в файле excel.Я не могу обновить определенный слайд, и я получаю «Ошибка содержимого Powerpoint»

После выполнения приложения, и когда я пытаюсь открыть файл pptx, я получаю «Powerpoint нашел проблему с контентом». После ремонта я замечаю, что я всегда получаю пустой слайд в слайде # 2, который показывает, что я не обновляю правильный слайд.

Что мне делать, чтобы перейти на слайд на основе слайдов. (У меня нет заголовков диаграмм в слайде powerpoint и диаграмме excel) и почему я получаю недопустимую ошибку содержимого.

Буду признателен за вашу помощь. Благодаря

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using OpenXmlPkg = DocumentFormat.OpenXml.Packaging; 
using DocumentFormat.OpenXml.Presentation; 
using DocumentFormat.OpenXml.Packaging; 
using DocumentFormat.OpenXml.Spreadsheet; 

namespace ExportChart 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     string SourceFile = "Projected Sales.xlsx"; 
     string TargetFile = "Projected Sales.pptx"; 
     string targetppt = "Generatedppt.pptx"; 

     ChartPart chartPart; 
     ChartPart newChartPart; 
     SlidePart slidepartbkMark = null; 
     string chartPartIdBookMark = null; 

     File.Copy(TargetFile, targetppt, true); 

     //Powerpoint document 
     using (OpenXmlPkg.PresentationDocument pptPackage = OpenXmlPkg.PresentationDocument.Open(targetppt, true)) 
     { 

      OpenXmlPkg.PresentationPart presentationPart = pptPackage.PresentationPart; 

      var secondSlidePart = pptPackage.PresentationPart.SlideParts.Skip(1).Take(1); 
      foreach (var slidepart in pptPackage.PresentationPart.SlideParts) 
      { 

      slidepartbkMark = slidepart; 

       if (slidepart.GetPartsCountOfType<ChartPart>() != 0) 
       { 
        chartPart = slidepart.ChartParts.First(); 
        chartPartIdBookMark = slidepart.GetIdOfPart(chartPart); 
        slidepart.DeletePart(chartPart); 
        slidepart.Slide.Save(); 
       } 

       //return; 
      } 

      newChartPart = slidepartbkMark.AddNewPart<ChartPart>(chartPartIdBookMark); 

      ChartPart saveXlsChart = null; 
      using (SpreadsheetDocument xlsDocument = SpreadsheetDocument.Open(SourceFile.ToString(), true)) 
      { 
       WorkbookPart xlsbookpart = xlsDocument.WorkbookPart; 

       foreach (var worksheetPart in xlsDocument.WorkbookPart.WorksheetParts) 
       { 
        if (worksheetPart.DrawingsPart != null) 
         if (worksheetPart.DrawingsPart.ChartParts.Any()) 
         { 
          saveXlsChart = worksheetPart.DrawingsPart.ChartParts.First(); 
         } 
       } 


       newChartPart.FeedData(saveXlsChart.GetStream()); 
       slidepartbkMark.Slide.Save(); 
       xlsDocument.Close(); 
       pptPackage.Close(); 
      } 
     } 
    } 
}  

}

ответ

2

Если есть кто-то, кто ищет, как определить слайд с номером слайда вам нужно сделать следующий

//Get the relationship id 
SlideIdList s = documentPart.Presentation.SlideIdList; 
SlideId nslideid = (SlideId)s.ElementAt(slideno-1); //slide no is the number of the slide 
string slidRelId = nslideid.RelationshipId; 

Следующего перебирать каждый слайд с помощью цикла , В цикле Еогеаспа добавьте следующий код, чтобы увидеть, если слайд имеет определенный идентификатор связи

// get the relationshipid of the current slide 
    string thisSlideno = documentPart.GetIdOfPart(slidePart); 
    if (thisSlideno == slidRelId) 
    { 
     //do your actions 
    } 

Я надеюсь, что это полезно

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