Как создать десятки договоров, актов или писем Word из Excel

Из одной таблицы Excel формируем отдельный Word-документ по каждой строке.

Как создать десятки договоров, актов или писем Word из Excel

Короткий ответ: Если нужно получить десятки отдельных договоров, актов или писем, источник удобно хранить в Excel, шаблон — в Word, а формирование и сохранение файлов автоматизировать.

Что получится

Для каждой строки Excel создаётся отдельный .docx, например Акт_15_Альфа.docx. Значения подставляются в закладки шаблона.

Результат: Как создать десятки договоров, актов или писем Word из Excel

Исходные данные

НомерДатаКонтрагентСумма
1508.08.2026ООО «Альфа»125000
1609.08.2026ООО «Бета»98000
1710.08.2026ООО «Гамма»154000

Word-шаблон содержит закладки DocNumber, DocDate, Company, Amount.

Как создать десятки договоров, актов или писем Word из Excel

Способ 1

Если достаточно получить все документы в одном Word-файле, используйте Слияние. Если нужны отдельные файлы — управляющий Excel-файл и шаблон Word.

Способ 2

Минимальный VBA из Excel:

Option Explicit

Sub CreateWordDocuments()
    Dim wdApp As Object, wdDoc As Object
    Dim ws As Worksheet
    Dim lastRow As Long, r As Long
    Dim templatePath As String, outputPath As String, fileName As String

    Application.ScreenUpdating = False
    On Error GoTo ErrHandler

    Set ws = ThisWorkbook.Worksheets("Данные")
    templatePath = ThisWorkbook.Path & "\template.docx"
    outputPath = ThisWorkbook.Path & "\Готовые\"
    If Dir(outputPath, vbDirectory) = "" Then MkDir outputPath

    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = False
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For r = 2 To lastRow
        Set wdDoc = wdApp.Documents.Open(templatePath, ReadOnly:=True)
        SetBookmarkText wdDoc, "DocNumber", ws.Cells(r, "A").Text
        SetBookmarkText wdDoc, "DocDate", ws.Cells(r, "B").Text
        SetBookmarkText wdDoc, "Company", ws.Cells(r, "C").Text
        SetBookmarkText wdDoc, "Amount", Format(ws.Cells(r, "D").Value, "#,##0.00")
        fileName = "Акт_" & CleanFileName(ws.Cells(r, "A").Text & "_" & ws.Cells(r, "C").Text) & ".docx"
        wdDoc.SaveAs2 outputPath & fileName
        wdDoc.Close False
    Next r

CleanExit:
    If Not wdApp Is Nothing Then wdApp.Quit
    Set wdDoc = Nothing
    Set wdApp = Nothing
    Application.ScreenUpdating = True
    Exit Sub

ErrHandler:
    MsgBox "Ошибка: " & Err.Description, vbExclamation
    Resume CleanExit
End Sub

Private Sub SetBookmarkText(ByVal doc As Object, ByVal bookmarkName As String, ByVal value As String)
    Dim rng As Object
    If doc.Bookmarks.Exists(bookmarkName) Then
        Set rng = doc.Bookmarks(bookmarkName).Range
        rng.Text = value
        doc.Bookmarks.Add bookmarkName, rng
    End If
End Sub

Private Function CleanFileName(ByVal s As String) As String
    Dim badChars As Variant, ch As Variant
    badChars = Array("\", "/", ":", "*", "?", Chr(34), "<", ">", "|")
    For Each ch In badChars
        s = Replace(s, ch, "_")
    Next ch
    CleanFileName = Trim$(s)
End Function

Автоматизация

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

Как создать десятки договоров, актов или писем Word из Excel

Типичные ошибки

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

Скачать пример

ZIP: generator.xlsm, template.docx, папка Готовые и README.

Когда лучше автоматизировать

Это типичная задача автоматизации, когда документов много, шаблонов несколько, нужны PDF, именование, проверки и раскладка по папкам.

Если у вас такая же задача, но таблица отличается, файлов много или процесс приходится повторять регулярно — можно автоматизировать под ваш файл.

Похожие материалы

  • Как автоматически заполнить Word данными из Excel
  • Как собрать данные из нескольких Excel-файлов в один
  • Как объединить все листы Excel в одну таблицу
  • Как объединить две таблицы Excel в одну по совпадающему значению

Нужно автоматизировать похожую задачу?

Пришлите пример Excel или Word и описание результата — оценю подходящий вариант.