Интеграция данных Excel в презентации PowerPoint
Введение
Презентации PowerPoint — мощный способ отображать и передавать информацию. Их часто используют вместе с книгами Excel, где Excel служит отличным источником структурированных данных, а PowerPoint превосходит в визуализации этих данных для аудитории.
Существует множество практических сценариев, где сочетание Excel и PowerPoint является необходимым: слияние писем, заполнение таблиц данными, генерация одного слайда на каждую запись данных (пакетная генерация слайдов), создание учебных материалов и объединение нескольких отчетов Excel в одну презентацию, и многое другое.
До настоящего времени реализация подобных функций с помощью API Aspose.Slides требовала использования сторонних решений, таких как Aspose.Cells. Хотя эти инструменты надёжны, они могут быть излишне сложными и дорогими для пользователей, которым нужна лишь базовая интеграция данных.
Как это работает
Чтобы упростить работу с данными Excel и сделать её более эффективной, Aspose.Slides представил новые классы для чтения данных из книг Excel и импорта содержимого в презентацию. Эта функция открывает новые возможности для пользователей API, желающих использовать Excel в качестве источника данных в своих рабочих процессах создания презентаций.
Новая функциональность предназначена для общих целей доступа к данным и не интегрирована в объектную модель документа презентации (DOM). Это означает, что она не позволяет редактировать или сохранять файлы Excel — её единственная цель — открывать книги и перемещаться по их содержимому для получения данных ячеек.
В основе этой функции лежит новый класс ExcelDataWorkbook. Этот класс позволяет загрузить книгу Excel из локального файла или потока. После загрузки он предоставляет несколько перегрузок метода GetCell, которые можно использовать для получения конкретных ячеек по их позиции (например, по индексам строки и столбца или по именованным диапазонам).
Каждый вызов GetCell возвращает экземпляр класса ExcelDataCell. Этот объект представляет одну ячейку в книге Excel и предоставляет доступ к её значению простым и интуитивным способом.
Импорт диаграммы Excel
Следующий шаг для расширения возможностей — класс ExcelWorkbookImporter. Этот вспомогательный класс предоставляет возможности импорта содержимого из книги Excel в презентацию. Он содержит несколько перегрузок метода AddChartFromWorkbook, которые помогают извлекать выбранную диаграмму из указанной книги Excel и добавлять её в конец указанной коллекции фигур в заданных координатах.
Импорт таблицы Excel
Класс ExcelWorkbookImporter также содержит несколько перегрузок метода AddTableFromWorkbook. Эти методы позволяют импортировать указанный диапазон ячеек из указанного листа и добавлять его как таблицу в конец заданной коллекции фигур в указанных координатах.
Короче говоря, это лёгкий и простой API для чтения данных Excel — именно то, что нужно многим разработчикам без нагрузки полной библиотеки обработки электронных таблиц.
Давайте напишем код
Пример сценария слияния писем
В следующем примере мы реализуем простой сценарий слияния писем, генерируя несколько презентаций на основе данных, хранящихся в книге Excel.
Для начала нам нужны две вещи:
- Книга Excel, содержащая данные

- Шаблон презентации PowerPoint

// Загрузить книгу Excel с данными о сотрудниках.
ExcelDataWorkbook workbook = new ExcelDataWorkbook("TemplateData.xlsx");
int worksheetIndex = 0;
// Загрузить шаблон презентации.
using Presentation templatePresentation = new Presentation("PresentationTemplate.pptx");
// Пройти по строкам Excel (исключая заголовок в строке 0).
for (int rowIndex = 1; rowIndex <= 4; rowIndex++)
{
// Создать новую презентацию для каждой записи сотрудника.
using Presentation employeePresentation = new Presentation();
// Удалить стандартный пустой слайд.
employeePresentation.Slides.RemoveAt(0);
// Склонировать слайд шаблона в новую презентацию.
ISlide slide = employeePresentation.Slides.AddClone(templatePresentation.Slides[0]);
// Получить абзацы из целевой фигуры (предполагается, что используется индекс фигуры 1).
IParagraphCollection paragraphs = (slide.Shapes[1] as IAutoShape).TextFrame.Paragraphs;
// Заменить заполнители данными из Excel.
string employeeName = workbook.GetCell(worksheetIndex, rowIndex, 0).Value.ToString();
IPortion namePortion = paragraphs[0].Portions[0];
namePortion.Text = namePortion.Text.Replace("{{EmployeeName}}", employeeName);
string department = workbook.GetCell(worksheetIndex, rowIndex, 1).Value.ToString();
IPortion departmentPortion = paragraphs[1].Portions[0];
departmentPortion.Text = departmentPortion.Text.Replace("{{Department}}", department);
string yearsOfService = workbook.GetCell(worksheetIndex, rowIndex, 2).Value.ToString();
IPortion yearsPortion = paragraphs[2].Portions[0];
yearsPortion.Text = yearsPortion.Text.Replace("{{YearsOfService}}", yearsOfService);
// Сохранить персонализированную презентацию в отдельный файл.
employeePresentation.Save($"{employeeName} Report.pptx", SaveFormat.Pptx);
}

Пример таблицы Excel
Во втором примере мы просто копируем данные из таблицы Excel и отображаем их на слайде PowerPoint в более визуально привлекательном виде.
В этом примере мы повторно используем ту же книгу Excel из первого примера, которая содержит простую таблицу сотрудников.
// Загрузить книгу Excel, содержащую данные о сотрудниках.
ExcelDataWorkbook workbook = new ExcelDataWorkbook("TemplateData.xlsx");
int worksheetIndex = 0;
// Создать новую презентацию PowerPoint.
using Presentation presentation = new Presentation();
// Добавить форму таблицы на первый слайд.
ITable table = presentation.Slides[0].Shapes.AddTable(
50, 200,
new double[] { 200, 200, 200 },
new double[] { 30, 30, 30, 30, 30 }
);
// Заполнить таблицу PowerPoint данными из книги Excel.
for (int rowIndex = 0; rowIndex < 5; rowIndex++)
{
for (int columnIndex = 0; columnIndex < 3; columnIndex++)
{
string cellValue = workbook.GetCell(worksheetIndex, rowIndex, columnIndex).Value.ToString();
table[columnIndex, rowIndex].TextFrame.Text = cellValue;
}
}
// Сохранить полученную презентацию в файл.
presentation.Save("Table.pptx", SaveFormat.Pptx);

Пример импорта диаграммы Excel
В этом примере мы импортируем диаграмму с первого листа книги Excel, использованной в предыдущем примере. Диаграмма будет ссылаться на внешний файл книги в полученной презентации.
Сначала мы добавляем круговую диаграмму в книгу Excel на основе таблицы сотрудников.

// Создать новую презентацию PowerPoint.
using Presentation presentation = new Presentation();
// Получить коллекцию фигур первого слайда.
IShapeCollection shapes = presentation.Slides[0].Shapes;
// Импортировать диаграмму с именем "Chart 1" с первого листа книги и добавить её в коллекцию фигур.
ExcelWorkbookImporter.AddChartFromWorkbook(shapes, 10, 10, "TemplateData.xlsx", "Sheet1", "Chart 1", false);
// Сохранить полученную презентацию в файл.
presentation.Save("Chart.pptx", SaveFormat.Pptx);

Пример импорта всех диаграмм Excel
Представьте, что у вас есть книга Excel, заполненная диаграммами, и вам нужно импортировать их все в презентацию. Каждая диаграмма должна быть размещена на новом слайде.
Следующий код проходит по всем листам исходного файла Excel, извлекает диаграммы с каждого листа и добавляет каждую диаграмму на отдельный слайд, используя пустой макет слайда. В полученной презентации будут встроены только данные диаграмм, а не вся книга.
// Загрузить книгу Excel, содержащую данные о сотрудниках.
ExcelDataWorkbook workbook = new ExcelDataWorkbook("ExcelWithCharts.xlsx");
// Создать новую презентацию PowerPoint.
using Presentation presentation = new Presentation();
// Получить макет пустого слайда.
ILayoutSlide blankLayout = presentation.LayoutSlides.GetByType(SlideLayoutType.Blank);
// Получить имена всех листов, содержащихся в книге Excel.
IList<string> worksheetNames = workbook.GetWorksheetNames();
foreach (var name in worksheetNames)
{
// Получить словарь, сопоставляющий индексы диаграмм с их названиями для листа.
IDictionary<int, string> worksheetCharts = workbook.GetChartsFromWorksheet(name);
foreach (var chart in worksheetCharts)
{
// Добавить новый слайд, используя макет пустого слайда.
ISlide slide = presentation.Slides.AddEmptySlide(blankLayout);
// Импортировать указанную диаграмму из книги Excel в коллекцию фигур слайда.
ExcelWorkbookImporter.AddChartFromWorkbook(slide.Shapes, 10, 10, workbook, name, chart.Key, false);
}
}
// Сохранить полученную презентацию в файл.
presentation.Save("Charts.pptx", SaveFormat.Pptx);
Пример импорта таблицы Excel
В этом примере мы импортируем отформатированную таблицу с листа Excel непосредственно в презентацию PowerPoint.
Исходный лист Excel содержит отформатированную таблицу с данными о сотрудниках:

// Создать новую презентацию PowerPoint.
using Presentation presentation = new Presentation();
// Получить коллекцию фигур первого слайда.
IShapeCollection shapes = presentation.Slides[0].Shapes;
// Импортировать таблицу с первого листа книги и добавить её в коллекцию фигур.
ExcelWorkbookImporter.AddTableFromWorkbook(shapes, 10, 10, "TemplateData.xlsx", "Sheet1", "A1:C5");
// Сохранить полученную презентацию в файл.
presentation.Save("FormattedTable.pptx", SaveFormat.Pptx);

Итоги
Этот механизм, доступный непосредственно в Aspose.Slides, объединяет работу с данными Excel и презентациями в одном месте. Он позволяет создавать слайды с визуальными диаграммами и данными, представленными в виде таблиц Excel, — без дополнительных библиотек или сложных интеграций.