Как обновить слайд PowerPoint с помощью диаграммы Excel

У меня есть один файл Excel, который имеет диаграмму (гистограмму). У меня также есть презентация Powerpoint с 3 слайдами. Обратите внимание, что на листе Excel на слайдах Powerpoint нет диаграммы "Заголовок". Мне нужно обновить диаграмму на слайде № 2 с помощью диаграммы в файле Excel.

Пожалуйста, обратите внимание, что я искал этот форум и нашел способы создания нового слайда, а также обновления диаграммы с использованием заголовка.

Любая помощь будет оценена. Спасибо за ваше время

РЕДАКТИРОВАТЬ: Ваше решение хорошо, но не помогает мне, как заменить диаграмму на определенном слайде. На мой вопрос я указал, что есть 3 слайда. Я хочу специально обновить диаграмму в слайде 2. Там нет названия диаграммы, поэтому мне нужно будет найти диаграмму для замены на основе номера слайда. Как это сделать? Еще раз спасибо.

1 ответ

Это можно сделать, выполнив следующие действия: (Примечание. Powerpoint - это цель, а excel - источник).

  1. Откройте цель и найдите ChartPart, который вы хотите заменить. Сохраните ссылку на родительскую SlidePart, где находится ChartPart, скопируйте RelationshipId ChartPart в SlidePart, а затем удалите ChartPart из целевого объекта.
  2. Сохраните источник и оставьте файл открытым.

            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;
                }
            }
    
  3. Откройте источник и найдите 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;
                    }
    
            }
    
  4. В ссылке SlidePart из шага 1 создайте новый ChartPart с вызовом AddNewPart, используя RelationshipId

        var newChartPart = slidePartBookMark.AddNewPart<ChartPart>(chartPartIdBookMark);
    
  5. Скопируйте содержимое исходной диаграммы в новую часть диаграммы, созданную на шаге 4, с идеей FeedData/GetStream, найденной здесь. Сохраните слайд и закройте свои файлы.

        newChartPart.FeedData(saveXlsChart.GetStream());
        slidePartBookMark.Slide.Save();
        sourceXls.Close();
        targetPPT.Close();
    

Я смог заставить его работать с простым источником / целью, который содержал только одну диаграмму каждый. Если ваши файлы более сложны, ваша логика поиска будет больше, чем First().

Надеюсь это поможет.

Другие вопросы по тегам