У меня есть лист 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();
}
}
}
}
}