Категория

Превратите документы в презентации PowerPoint с помощью ИИ на C#

2026-09-10 06:45:49 Allen Yang
AI Summarize:
ChatGPT
ChatGPT ✓
Claude ✓
Grok ✓
Perplexity ✓
Quick
Quick
Concise overview
Highlights
Key takeaways
Detailed
Structured explanation
Brief
One sentence summary
Summarize |

Превратите документы в презентации PowerPoint с помощью ИИ на C# — файлы Word, PDF и Excel объединяются в одну презентацию с помощью одной инструкции на естественном языке

Превращение документов в презентации PowerPoint с помощью ИИ на C# — это больше, чем просто конвертация форматов. Когда отчёт на 30 страниц становится презентацией из 10 слайдов, это означает, что кто-то прочитал весь документ, решил, какие 90% опустить, реорганизовал оставшееся в связное повествование и применил визуальный дизайн. Это редакторский синтез — то, чего традиционные библиотеки для работы с PowerPoint не делают.

Интересно то, что именно синтезируется. В реальных рабочих процессах источником редко бывает один файл. Квартальный обзор бизнеса берёт цифры из книги Excel, повествование из отчёта Word и подписанный счёт из PDF. Ценность ИИ-агента для работы с документами не в том, чтобы «конвертировать один .docx в .pptx», а в том, чтобы «прочитать все три и дать мне одну презентацию, которая рассказывает историю по ним всем». В этой статье показан самый простой способ сделать именно это с помощью Spire.Agent.Office на C#: передайте агенту все документы плюс одну инструкцию — и пусть он сгенерирует презентацию за один вызов.

1. Одна инструкция, множество источников

Традиционный код Spire.Office рассматривает каждый формат как отдельный остров. Чтобы построить презентацию из отчёта Word вместе с листом Excel, вам пришлось бы:

  1. Использовать Spire.Doc, чтобы открыть .docx и извлечь нужный текст.
  2. Использовать Spire.XLS, чтобы прочитать книгу и вычислить показатели.
  3. Использовать Spire.Pdf, если источник — это PDF.
  4. Использовать Spire.Presentation, чтобы создавать слайды один за другим, размещать каждый текстовый блок и диаграмму и рассчитывать макеты вручную.

Это четыре программных интерфейса, парсер для каждого формата и ручной движок вёрстки. Как только структура документа меняется, код ломается.

Spire.Agent.Office сводит всё это к одной инструкции. Вы передаёте агенту все исходные файлы и говорите, какую историю должна рассказать презентация. Агент читает каждый формат, решает, что важно в них всех, и создаёт слайды — без ручного кода вёрстки.

Ментальная модель — один шаг:

Несколько типов документов поступают в одного ИИ-агента и выходят в виде одной презентации PowerPoint

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

2. Что вам понадобится

  • .NET 6+ (в примере используется net10.0).
  • NuGet-пакет Spire.Agent.Office. Он транзитивно подключает Spire.Doc, Spire.Pdf, Spire.XLS и Spire.Presentation, поэтому отдельно устанавливать их не нужно.
  • SpireToken (ключ API Spire.Agent.Office). Агент взаимодействует со службой ИИ, поэтому для фактической генерации требуется действительный токен.
  • Импорты пространств имён:
using Spire.Agent.Office.AI;        // AIOptions, AIDocumentProcessor, AIResult
using Spire.Agent.Office.Extensions;// presentation.AI(...) extension
using Spire.Presentation;           // Presentation

3. Простой рецепт: один вызов, одна презентация

Основная идея — радикальная простота: передайте каждый исходный документ как вложение, напишите одну инструкцию на естественном языке и позвольте агенту сделать всё — чтение, понимание, синтез, вёрстку — за один вызов ExecuteInstruction.

string[] sources = new[]
{
    Path.Combine(sampleDir, "AI-Powered Document Processing Report.docx"),
    Path.Combine(sampleDir, "purchase-orders.xlsx"),
    Path.Combine(sampleDir, "invoice_INV-2026-0815.pdf")
};

string instruction =
    "Create a concise Q3 business review summary from the provided documents. " +
    "1. Use a clean blue theme; " +
    "2. Summarize business review, project status, customer pilot research, and platform performance; " +
    "3. Keep each slide focused on one key finding or metric; " +
    "4. Generate 5 slides.";

AIResult result = processor.ExecuteInstruction(
    ppt, instruction, savePath, sources,
    autonomousOutput: true, maxTurns: null);

Вот и весь рецепт: один вызов метода, одна строка инструкции. Никаких парсеров для отдельных форматов, никаких промежуточных файлов, никакого ручного кода вёрстки. Агент читает каждый формат, решает, что важно в них всех, и записывает презентацию напрямую в savePath.

Флаг autonomousOutput: true — то, что делает это возможным: он говорит агенту, что тот может записывать файлы (включая итоговый .pptx), не запрашивая подтверждения на каждом шаге. Установите maxTurns в null (или большое число), чтобы у агента было достаточно шагов для завершения.

4. Полный пример: одна презентация из Word + PDF + Excel

Вот полная программа. Укажите ей файл или папку — и она построит презентацию за один вызов ИИ:

using System;
using System.IO;
using System.Linq;
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Presentation;

class Program
{
    static void Main()
    {
        string instruction =
            "Create a concise Q3 business review summary from the provided documents. " +
            "1. Use a clean blue theme; " +
            "2. Summarize business review, project status, customer pilot research, and platform performance; " +
            "3. Keep each slide focused on one key finding or metric; " +
            "4. Generate 5 slides.";

        AIOptions options = new AIOptions { SpireToken = "sk-YourSpireToken", TimeoutMs = 1000000 };

        using (Presentation ppt = new Presentation())
        {
            AIResult result = ppt.AI(options).ExecuteInstruction(
                ppt, instruction, @"C:\Samples\Q3_Review.pptx", ResolveInputs(@"C:\Samples"),
                autonomousOutput: true, maxTurns: null);

            Console.WriteLine(result.Success ? "Success" : $"Error={result.ErrorMessage}");
        }
    }

    // Point at a file or a folder; a folder is filtered to supported document formats.
    static string[] ResolveInputs(string path) =>
        File.Exists(path) ? new[] { path }
        : Directory.GetFiles(path).Where(IsSupported).OrderBy(f => f).ToArray();

    static bool IsSupported(string file) =>
        new[] { ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md" }
            .Contains(Path.GetExtension(file).ToLowerInvariant());
}

Вот и вся программа. Помимо самого вызова агента, единственный код — это ResolveInputs, который лишь решает, какие файлы прикрепить: он никогда не читает и не разбирает документ. Инструкция — единственная часть, описывающая дизайн (тема, количество слайдов, акцент); чтение, принятие решений и вёрстка — задача агента.

Один вызов, пять слайдов — презентация, которую создаёт приведённая выше программа:

Сгенерированная презентация Q3 business review из 5 слайдов, синтезированная из отчёта Word, книги Excel и счёта PDF

5. Как это работает изнутри

  • AIDocumentProcessor получается из Presentation через ppt.AI(options). Объект Presentation — это холст, на который агент рисует слайды.
  • AIOptions содержит конфигурацию: SpireToken (ваш ключ) и TimeoutMs (задайте большое значение для реальных документов — анализ больших документов с помощью ИИ занимает время).
  • ExecuteInstruction запускает агента. Вы передаёте Presentation, инструкцию на естественном языке instruction, savePath для выходного .pptx и string[] путей к исходным файлам (любая комбинация Word, PDF, Excel, Markdown). При autonomousOutput: true агент может записывать файлы — включая итоговую презентацию — не запрашивая подтверждения. Он возвращает AIResult с полями Success, ErrorMessage и OutputFiles (всё, что создал агент).
  • maxTurns управляет количеством разрешённых шагов агента. Установите его в null для отсутствия ограничения или задайте большое число (например, 80) для больших наборов документов.
  • GeneratePresentation(sourcePath, instruction, savePath) — это специальный короткий путь, когда у вас ровно один исходный документ. Он возвращает PPTGenerationResult (Success, GeneratedPages, TotalPages, OutputPath, ErrorMessage) вместо AIResult. Его sourcePath — это один файл, и именно поэтому в этой статье используется путь ExecuteInstruction с несколькими вложениями: именно он позволяет одной презентации опираться на несколько источников за один вызов.

Почему бы сначала не объединить всё в Markdown? Вы можете — см. Вариант B в разделе 6. Но для большинства случаев подход с одним вызовом проще, быстрее и даёт тот же результат. Промежуточный Markdown полезен только тогда, когда вы хотите просмотреть или отредактировать объединённое содержимое перед тем, как тратить токены на презентацию.

6. Точный контроль

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

Настройте инструкцию. Структура, длина, тема и диаграммы презентации управляются строкой инструкции. Будьте конкретны:

// e.g. ask for a specific page count, theme, and a chart on a given slide
"Create a 12-slide deck. Light minimalist theme, accent colour #2E5AAC. " +
"Include a bar chart of monthly revenue on slide 5. Keep each slide to one key message.";

Вариант A — резюмируйте каждый источник самостоятельно (более предсказуемо). Если вы предпочитаете давать запрос по каждому документу по отдельности, а не доверять одной междокументной инструкции, используйте в цикле SummarizeDocument, который возвращает резюме агента по одному файлу в виде string:

var sb = new StringBuilder();
foreach (var file in sources)
    sb.AppendLine($"## {Path.GetFileName(file)}\n\n{processor.SummarizeDocument(file)}");
File.WriteAllText(Path.Combine(workDir, "consolidated.md"), sb.ToString());

Затем передайте объединённый Markdown в ExecuteInstruction как единственный источник — вы получите отдельное резюме по каждому документу, которое можно прочитать и отредактировать перед генерацией.

Вариант B — объединить в Markdown, затем сгенерировать (два шага). В случаях, когда нужен промежуточный файл для просмотра, разделите работу на два вызова. Шаг 1 использует ExecuteInstruction в автономном режиме, чтобы объединить все источники в один файл Markdown; Шаг 2 подаёт этот Markdown снова в ExecuteInstruction для построения презентации:

// Step 1 — merge all documents into one Markdown file
string consolidateInstruction =
    "Read all the attached files. Merge their content into a SINGLE Markdown " +
    "document named 'output_consolidated.md'. Use one top-level heading per source, " +
    "preserve key facts / figures / tables, and drop boilerplate. Output ONLY that file.";
processor.ExecuteInstruction(ppt, consolidateInstruction,
    Path.Combine(workDir, "output_consolidated.pptx"), sources,
    autonomousOutput: true, maxTurns: 40);

string consolidatedMd = Path.Combine(workDir, "output_consolidated.md");

// Step 2 — generate the deck from the consolidated Markdown
string genInstruction =
    "Create a 9-slide quarterly business review deck from the consolidated material. " +
    "Professional corporate blue, clear hierarchy, speaker notes per slide.";
processor.ExecuteInstruction(ppt, genInstruction,
    Path.Combine(workDir, "QBR_Deck.pptx"), new[] { consolidatedMd },
    autonomousOutput: true, maxTurns: 40);

Компромисс: Вариант B даёт вам просматриваемый файл Markdown между двумя вызовами, что полезно для отладки или когда объединение требует проверки человеком. Рецепт с одним вызовом из раздела 3 — рекомендуемый вариант по умолчанию, потому что он проще и быстрее.

Вам также может понравиться: Автоматизация обработки счетов с помощью ИИ-агента в .NET — ещё один рабочий процесс с большим объёмом документов, в котором агенту передаётся папка с файлами, а на выходе получается готовый документ.

7. Чтение и проверка результата

После генерации снова откройте презентацию и проверьте её программно:

using (Presentation deck = new Presentation())
{
    deck.LoadFromFile(savePath);
    Console.WriteLine($"Total slides: {deck.Slides.Count}");

    for (int i = 0; i < deck.Slides.Count; i++)
    {
        ISlide slide = deck.Slides[i];
        string title = slide.Title ?? "(no title)";
        Console.WriteLine($"Slide {i + 1}: {title}");
    }
}

Здесь же уместен и этап проверки человеком: загрузите сгенерированную презентацию, проверьте заголовки и уточните инструкцию, если что-то не так.

8. Часто задаваемые вопросы

В сгенерированной презентации неправильное количество слайдов. Если источник большой, анализ может занять больше времени, чем тайм-аут по умолчанию, и агент завершится досрочно. Установите AIOptions.TimeoutMs в большое значение (например, 1000000 — примерно 17 минут) и укажите диапазон страниц в инструкции, например: «Оставьте итоговую презентацию в пределах 8–12 слайдов».

Агент не включает содержимое одного из документов. Сложные документы могут запутать один проход. Явно назовите нужное содержимое в инструкции («включите выводы из отчёта Word», «сохраните таблицу из листа Excel»). Если проблема сохраняется, попробуйте двухшаговый подход (Вариант B в разделе 6), чтобы просмотреть объединённый Markdown перед генерацией.

Вызов завершается ошибкой «401 Invalid token». SpireToken отклонён — убедитесь, что он действителен, не истёк и правильно скопирован в AIOptions.SpireToken.

Как передать несколько документов? ExecuteInstruction принимает string[] путей к файлам в качестве четвёртого аргумента. Передайте все исходные файлы — любую комбинацию .docx, .pdf, .xlsx, .md и других — и агент прочитает их все за один вызов. При одном исходном документе специальный короткий путь — GeneratePresentation(sourcePath, instruction, savePath); именно вызов с несколькими вложениями, приведённый выше, позволяет создать одну презентацию из нескольких источников.

Получите свой ключ SpireToken Свяжитесь с нами, чтобы запросить пробный или коммерческий ключ API, либо подайте заявку на временную лицензию. Настройте его в коде:

AIOptions options = new AIOptions();
options.SpireToken = "sk-YourSpireToken";
options.TimeoutMs  = 1000000;

См. также