Категория

Создание документов Word из данных Excel на C#

2026-08-27 06:11:11 jie zou
AI Summarize:
ChatGPT
ChatGPT
Claude
Grok
Perplexity
Quick
Quick
Concise overview
Highlights
Key takeaways
Detailed
Structured explanation
Brief
One sentence summary
Summarize |

Создание документов Word из данных Excel на C# — превращение строк таблицы в персонализированные файлы Word с помощью инструкций на естественном языке

Создание документов Word из данных Excel означает использование строк электронной таблицы в качестве источника для одного или нескольких структурированных файлов Word, обычно на основе шаблона или рабочего процесса генерации документов. Традиционно эта задача решается с помощью функции «Слияние» (Mail Merge) в Word: вы сопоставляете столбцы Excel с полями в шаблоне .docx и позволяете Word создавать по одному документу на каждую строку. Эту же задачу можно автоматизировать на C# с помощью SDK для работы с документами или вывести на новый уровень с помощью ИИ-агента, который выполняет требования на основе инструкций на естественном языке. В этой статье сравниваются различные подходы, рассматриваются ограничения слияния и приводится рабочий пример на C#, построенный на базе Spire.Agent.Office — SDK ИИ-агента для офисных документов.

Быстрая навигация


1. Что значит создавать документы Word из данных Excel?

Эта фраза звучит похоже на «конвертировать Excel в Word», но цель здесь иная. Конвертация .xlsx в .docx меняет формат файла, сохраняя содержимое примерно тем же. Создание документов Word из данных Excel формирует новые документы, содержимое которых извлекается из ячеек таблицы: заказ для каждого клиента, ежемесячный отчет по регионам, пакет писем или этикеток из списка адресов, набор счетов из таблицы заказов.

Суть задачи почти всегда одна и та же:

Строки Excel (по одной записи) становятся структурой документа, затем создается один выходной файл на запись (или один объединенный файл) — общая схема генерации документов Word из Excel

На обычном языке это звучит так: «У меня есть список клиентов и их заказов в Excel; мне нужен документ Word для каждого из них с их информацией, списком товаров и итоговой суммой». Важно слово извлекается: содержимое документа берется из данных, поэтому это генерация «данные в документ», а не просто смена формата.

Это именно та задача, которой посвящена статья. Ниже мы рассмотрим разные способы её решения и момент, когда стоит перестать настраивать поля вручную.


2. Традиционный способ: Слияние из Excel в Word

На уровне интерфейса стандартным ответом на вопрос «как превратить список Excel во множество документов Word» является Слияние (Mail Merge) в Word. Это функция, о которой думает большинство пользователей, и Microsoft предоставляет пошаговые руководства по её использованию. Механизм прост и понятен:

Слияние из Excel в Word: книга Excel (строки = записи, столбцы = поля) наполняет поля слияния в шаблоне .docx, и слияние создает по одному документу на строку

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

Слияние отлично подходит для одного типа задач: вставить этот столбец в это поле много раз. Письма, конверты, этикетки и уведомления с фиксированной версткой — его стихия. Оно работает внутри Office, не требует программирования, и для таких стабильных документов это действительно подходящий инструмент.


3. Ограничения слияния

Ограничения наступают в тот момент, когда документ перестает быть фиксированной формой с пустыми местами и становится чем-то, что должно зависеть от данных. Слияние подставляет значения; оно не определяет структуру, не анализирует содержимое и не создает ничего нового.

Сравните два запроса. Первый — то, с чем справляется слияние:

«Вставь имя клиента в поле имени, адрес в поле адреса, а заказ в детали заказа».

Второй — то, чем на самом деле является большинство отчетов:

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

Второй запрос не проходит по трем предположениям слияния:

  • Структура меняется. Клиенту с тремя позициями в заказе нужен другой объем документа, чем клиенту с тридцатью. Поля слияния предполагают фиксированную верстку; они не могут расширять таблицу на столько строк, сколько требует объем данных.
  • Содержимое нужно вычислять, а не копировать. «Обобщить покупательское поведение» и «отметить VIP-клиентов» требует создания текста и принятия решений, которых нет ни в одном столбце. Нет исходного поля, к которому можно было бы привязаться.
  • Результат — набор реальных файлов. Каждая запись должна быть отдельным документом Word со своим именем, и рабочий процесс должен выполняться автоматически внутри приложения, а не через мастер Office.

Это честная оценка возможностей слияния: оно отлично справляется с сопоставлением полей, но становится менее подходящим, когда структура документа, содержимое или логика вывода должны меняться в зависимости от данных. Более глубокая потребность — превращение данных в документы — это задача генерации, и именно здесь начинаются пути автоматизации, описанные ниже.


4. Агентный подход: превращение требования в инструкцию

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

Ценность подхода видна в цепочке действий:

Агентный подход от данных Excel к документам: понимание запроса, анализ таблицы, определение структуры документа, генерация контента Word, создание документов

Шаги, которые трудно выразить через традиционное слияние — особенно три средних — это именно то, где агент проявляет себя. Он может интерпретировать, что означает столбец («Итого», «Продажи» и «Нетто» могут означать одно и то же понятие под разными заголовками), сформировать структуру документа под каждую запись и составить сводные абзацы. Вы предоставляете предложение, а не карту полей.

Главная мысль этой статьи: слияние сопоставляет столбцы Excel с полями Word; ИИ-агент генерирует документы на основе требования. Первое — это подстановка значений, второе — то, что требовалось на самом деле.


5. Три способа автоматизации создания Word в .NET

Выбор правильного пути важнее, чем сам код, потому что у каждого пути своя кривая затрат. Для приложения .NET, которому нужен такой рабочий процесс, есть три реалистичных варианта:

Подход Что требуется Гибкость Лучшее применение
Слияние (Mail Merge) Шаблон .docx с полями слияния + источник Excel; запуск слияния Сопоставляет один столбец с одним полем; пасует перед переменной структурой и аналитикой Письма, этикетки, конверты с фиксированной формой
Привязка полей через SDK Загрузка шаблона в коде, открытие книги, цикл по строкам, поиск-замена, сохранение Детерминированный и тестируемый; вы вручную поддерживаете карту столбцов, любое изменение требует перекомпиляции Масштабируемое повторение одного стабильного шаблона
ИИ-агент Передача книги как вложения, описание вывода, чтение результата Обрабатывает переменную структуру, анализ записей, условия, сводки Документы, зависящие от данных, или процессы, которые часто меняются

Краткий вывод для большинства случаев:

  • Форма никогда не меняется, одно поле на столбец, массовая рассылка — слияние вне конкуренции.
  • Форма стабильна, но нужна программная реализация, детерминированность и тесты — используйте цикл привязки полей через SDK.
  • Документ должен меняться в зависимости от данных, включать анализ или часто меняться — здесь ИИ-агент окупает себя, так как стоимость изменений часто сводится к обновлению инструкции, а не к переписыванию логики маппинга и верстки.

6. Создание персонализированных документов Word на C#

Конкретный рабочий пример задачи «один документ Word на запись» — это сводка заказа клиента. Входные данные — книга заказов и простой шаблон Word; выходные данные — персонализированный документ для каждого клиента. Полная настройка (токен, пакет и проект) описана в руководстве Getting Started; здесь мы сосредоточимся на самом вызове генерации.

using Spire.Doc;
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;

AIOptions options = new AIOptions
{
    SpireToken = spireToken,
    WorkDir = @"C:\order-ops\output",   // папка для записи сгенерированных документов
    TimeoutMs = 300000
};

using (Document doc = new Document())
{
    // Шаблон предоставляет якоря для записей; книга — источник данных.
    doc.LoadFromFile(@"C:\order-ops\templates\order-summary-template.docx");

    // savePath = null: одна инструкция создает по одному документу на запись,
    // записанному в папку WorkDir. Никаких циклов C# по строкам.
    AIResult result = doc.AI(options).ExecuteInstruction(
        doc,
        "Прочитай данные заказов клиентов в Q3-orders.xlsx. Создай по одному независимому " +
        "документу Word для каждого клиента, строка за строкой. Включи их контактную " +
        "информацию, каждую позицию с количеством и суммой, итоговые суммы заказа, " +
        "и одноабзацную сводку их покупательского поведения. Отметь клиентов, " +
        "чья сумма превышает 50 000, как VIP. Сохрани каждый документ как отдельный " +
        "файл с именем output_ и именем клиента (например, " +
        "output_acme-order-summary.docx).",
        null,
        new[] { @"C:\order-ops\input\Q3-orders.xlsx" });

    if (result == null || !result.Success)
        throw new InvalidOperationException($"Генерация не удалась: {result?.ErrorMessage}");
}

Три детали важны при запуске. Во-первых, инструкция — это место, где живет логика генерации: анализ («сводка поведения»), условная логика («отметить клиентов выше 50 000») и структура («каждая позиция»). Во-вторых, книга должна быть аккуратной: первая строка — заголовок, одна запись на строку, никаких пустых строк или объединенных ячеек заголовка — те же правила, что ожидает Word. В-третьих, базовый документ задает макет; даже простая структура даст агенту полезную отправную точку. С полностью пустым базовым документом та же инструкция создаст один объединенный документ.

Важно правило именования: документы, которые агент записывает в WorkDir, должны начинаться с префикса output_, иначе SDK не посчитает их сгенерированными файлами.

Пример вывода: персонализированные сводки заказов, созданные агентом, каждая из которых построена на основе записи клиента из книги

Расширение .docx в цели сохранения определяет формат вывода; укажите .pdf, и агент экспортирует идентичные документы для распространения без отдельного шага рендеринга.

Ключевые вызовы API

  • Document.AI(options) — прикрепляет ИИ-процессор к объекту документа Word
  • ExecuteInstruction(doc, instruction, savePath, attachments) — запускает генерацию; null в savePath означает «записать в WorkDir»
  • AIResult.Success / AIResult.ErrorMessage — проверяет результат выполнения и выводит ошибки

7. Что вы написали бы без агента

Для контраста, путь привязки полей через SDK для той же задачи делает всё явно. Ниже приведен упрощенный пример, показывающий объем необходимой логики:

using Spire.Doc;
using Spire.Xls;

foreach (DataRow row in customersTable.Rows)
{
    using (Document doc = new Document())
    {
        doc.LoadFromFile(@"templates\order-summary-template.docx");

        // Поиск и замена по каждому якорю...
        doc.Replace("{{CustomerName}}", row["Customer"].ToString(), true, true);
        doc.Replace("{{TotalAmount}}", row["Amount"].ToString("C"), true, true);

        // Позиции заказа живут на втором листе: вы вручную объединяете их,
        // строите таблицу и вставляете в закладку...
        // Правило «отметить VIP-клиентов» — это if/else, который вы поддерживаете,
        // а сводный абзац — это шаблон, который вы пишете вручную.
        doc.SaveToFile($@"out\{row["Customer"]}-order-summary.docx");
    }
    // ... и каждое новое правило или изменение макета требует правки кода и перекомпиляции.
}

До и после: цикл привязки полей с жестко закодированными вызовами замены, свернутый в одну инструкцию на естественном языке

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


8. Где заканчивается ИИ и начинается логика приложения

Полезная граница — это не «что ИИ может, а что нет», а чем должно владеть приложение. ИИ-агент для генерации документов работает поверх детерминированного кода; он не заменяет его.

Ваше приложение по-прежнему владеет частями, не связанными с пониманием таблицы:

  • Доступ к файлам — поиск книги, проверка прав, подготовка входов
  • Планирование — когда запускается задача, по какому триггеру
  • Контроль источников данных — какая книга является авторизованной
  • Обработка ошибок — что делать, если файл отсутствует
  • Финальное утверждение — человек проверяет документы перед отправкой

Агент берет на себя семантические шаги:

  • Понимание — чтение смысла столбцов из разных книг
  • Планирование структуры — определение количества секций и строк
  • Анализ — превращение данных в сводку и флаги
  • Композиция — сборка персонализированных документов

Оставьте детерминированную «сантехнику» в коде, где она тестируема и аудируема, а семантическую генерацию передайте агенту.


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

Является ли это заменой слиянию Word?

Это не прямая замена, а развитие той же задачи. Слияние сопоставляет столбцы Excel с полями Word, что достаточно для письма со стабильной формой. ИИ-агент может делать это, а также читать книгу по смыслу, формировать структуру под запись, добавлять анализ и составлять текст. Для простых задач слияние остается хорошим инструментом; когда документ должен меняться в зависимости от данных, агент берет на себя больше работы.

Как создавать несколько документов Word из данных Excel?

Передайте книгу как вложение, установите путь сохранения в null и укажите AIOptions.WorkDir на папку вывода. Один вызов ExecuteInstruction с инструкцией «строка за строкой» заставит агента создать по одному независимому документу на запись.

Можно ли создавать документы Word из Excel без слияния?

Да. На C# вы можете привязать шаблон через SDK напрямую или передать книгу ИИ-агенту, который прочитает её на основе инструкции и вернет реальный .docx или PDF.

В чем разница между слиянием и ИИ-генерацией?

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

Можно ли создавать персонализированные документы Word из Excel на C#?

Да. Загрузите шаблон Word в Spire.Doc, прикрепите книгу Excel и вызовите ExecuteInstruction с описанием вывода. Агент прочитает каждую запись и составит документ, настроенный под неё.

Готовы автоматизировать создание документов?

Если ваш рабочий процесс — это «данные Excel превращаются в персонализированные документы Word», самый быстрый путь — описать результат и позволить агенту сделать остальное. Следуйте руководству Getting Started, чтобы запустить свой первый рабочий процесс на базе инструкций в .NET.

Дополнительное чтение