DOCX формат это обычный ZIP архив, который можно открыть любым архиватором.

Структура docx
Все содержимое документы находиться в файле word/document.xml. Открываем файл в Word’e, добавляем пару переменных в документ, например: {NAME}, {SURNAME}. И сохраняем документ.
Для работы с Zip архивом в PHP я использую ZipArchive.
<?php
//Указываем путь до подготовленного документа
$docxFile = '/document.docx';
//Список параметров
$params = array(
'{NAME}' => 'Anatoliy',
'{SURNAME}' => 'Skornyakov'
);
if (!file_exists($docxFile)) {
die('File not found.');
}
$zip = new ZipArchive();
if (!$zip->open($docxFile)) {
die('File not open.');
}
$documentXml = $zip->getFromName('word/document.xml');
//Заменяем все найденные переменные в файле на значения
$documentXml = str_replace(array_keys($params), array_values($params), $documentXml);
$zip->deleteName('word/document.xml');
$zip->addFromString('word/document.xml', $documentXml);
//Закрываем и сохраняем архив
$zip->close();
Спасибо большое за прекрасный скрипт! Очень помог.
Спасибо! Открыли глаза на .docx! )) Очень помогло.
Как вы решаете проблему с внутренностями docx-файла. Я тоже думал, что все так легко, но по факту Word вставляет между символами свои теги и получается каша: {NAME} Помогает только вставка в документ тегов "Как текст", т.е. без каких-либо форматов.
Не было необходимости вставлять какие то другие объекты.
Что делать, если у меня в *.docx хранятся данные в таблицах, да еще текст вставлен вставками(документ создан другой программой), мне эти данные нужно считать и занести в БД, но проблема в том, что при чтении этого файла получается каша, это еще мягко выражаясь, можно ли получить данные с xml-тегами?
Кстати, если нужно переконвертировать в doc - помогает libreoffice со свей консольной командой soffice --headless --convert-to doc mydoc.docx
а как же, например, делать если нужно данные в цикле подставлять, то есть если естьшаблон, например, на 2 листа, а нужно сделать по этому шаблону, файл на 20 листов, чтобы переменная {ADRESS} заменялась не один раз, а несколько!
Спасибо за совет! Как просто, оказывается, работать с docx.
Доброго времени суток. Выдает File not found. подскажите в чем может быть проблема? документ назвал 1.docx в документе в тексте вставил {NAME}, {SURNAME}. в php изменил $docxFile = '/1.docx'; я просто нуб в этом и чего то не понимаю. Спасибо.
$docxFile = '/1.docx'; → $docxFile = '1.docx';