Как обновить слайд PowerPoint с помощью диаграммы Excel
У меня есть один файл Excel, который имеет диаграмму (гистограмму). У меня также есть презентация Powerpoint с 3 слайдами. Обратите внимание, что на листе Excel на слайдах Powerpoint нет диаграммы "Заголовок". Мне нужно обновить диаграмму на слайде № 2 с помощью диаграммы в файле Excel.
Пожалуйста, обратите внимание, что я искал этот форум и нашел способы создания нового слайда, а также обновления диаграммы с использованием заголовка.
Любая помощь будет оценена. Спасибо за ваше время
РЕДАКТИРОВАТЬ: Ваше решение хорошо, но не помогает мне, как заменить диаграмму на определенном слайде. На мой вопрос я указал, что есть 3 слайда. Я хочу специально обновить диаграмму в слайде 2. Там нет названия диаграммы, поэтому мне нужно будет найти диаграмму для замены на основе номера слайда. Как это сделать? Еще раз спасибо.
1 ответ
Это можно сделать, выполнив следующие действия: (Примечание. Powerpoint - это цель, а excel - источник).
- Откройте цель и найдите ChartPart, который вы хотите заменить. Сохраните ссылку на родительскую SlidePart, где находится ChartPart, скопируйте RelationshipId ChartPart в SlidePart, а затем удалите ChartPart из целевого объекта.
Сохраните источник и оставьте файл открытым.
foreach (var slidePart in targetPPT.PresentationPart.SlideParts) { if (slidePart.ChartParts.Any()) { slidePartBookMark = slidePart; var chartPart = slidePart.ChartParts.First(); chartPartIdBookMark = slidePart.GetIdOfPart(chartPart); slidePart.DeletePart(chartPart); slidePart.Slide.Save(); return; } }
Откройте источник и найдите ChartPart, который вы хотите скопировать в цель. Это будет в DrawingsPart WorksheetPart где-нибудь в вашем источнике. Сохраните ссылку на ChartPart и оставьте файл открытым.
foreach (var worksheetPart in sourceXls.WorkbookPart.WorksheetParts) { if (worksheetPart.DrawingsPart != null) if (worksheetPart.DrawingsPart.ChartParts.Any()) { saveXlsChart = worksheetPart.DrawingsPart.ChartParts.First(); return; } }
В ссылке SlidePart из шага 1 создайте новый ChartPart с вызовом AddNewPart, используя RelationshipId
var newChartPart = slidePartBookMark.AddNewPart<ChartPart>(chartPartIdBookMark);
Скопируйте содержимое исходной диаграммы в новую часть диаграммы, созданную на шаге 4, с идеей FeedData/GetStream, найденной здесь. Сохраните слайд и закройте свои файлы.
newChartPart.FeedData(saveXlsChart.GetStream()); slidePartBookMark.Slide.Save(); sourceXls.Close(); targetPPT.Close();
Я смог заставить его работать с простым источником / целью, который содержал только одну диаграмму каждый. Если ваши файлы более сложны, ваша логика поиска будет больше, чем First().
Надеюсь это поможет.