Функция заменяет в файлах *.docx и *.xlsx искомое. То, что будет заменяться, необходимо набирать не используя стрелки на клавиатуре и не шевеля курсор, иначе текст разбивается умным майкрософтовским движком на элементы. Т.е. нельзя написать сначала {{}}, а потом вписать внутрь слово. Надо писать сразу целиком. Код (PHP): function MSOxReplace($filename, $replacements) { try { //ThrowOnFalse(is_file($filename)); $zip = new ZipArchive; $res = $zip->open($filename); //ThrowOnFalse($res); $innerpaths = [ 'xl/sharedStrings.xml', 'word/document.xml', 'word/header1.xml', 'word/header2.xml', 'word/header3.xml', 'word/footer1.xml', 'word/footer2.xml', 'word/footer3.xml', ]; foreach ($innerpaths as $innerpath) { $contents = $zip->getFromName($innerpath); if ($contents === false) { continue; } $zip->addFromString($innerpath, str_replace(array_keys($replacements), $replacements, $contents)); } $zip->close(); return true; } catch (Exception $exc) { //echo $exc->getTraceAsString(); } return false; } $replacements = [ '{{NAME}}' => 'Igor', '{{PHONE}}' => '123654', ]; MSOxReplace(ROOT . '/doc.xlsx', $replacements); MSOxReplace(ROOT . '/doc.docx', $replacements);