Вчера я написал статью, в которой описал процесс заполнения docx шаблона средствами phpWord. Там же я отметил, что сохранять документ надо в режиме совместимости. Однако этот момент можно пропустить и сделать фикс.
Для того, чтобы использовать функцию setValue с документами, созданными в Word 2010 необходимо поправить саму библиотеку phpWord.
Откройте файл PHPWord/Template.php и найдите там функцию setValue
Замените ее полностью на приведенный код:
public function setValue($search, $replace) {
if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {
$search = '${'.$search.'}';
}
preg_match_all('/\$[^\$]+?}/', $this->_documentXML, $matches);
for ($i=0;$i<count($matches[0]);$i++){
$matches_new[$i] = preg_replace('/(<[^<]+?>)/','', $matches[0][$i]);
$this->_documentXML = str_replace($matches[0][$i], $matches_new[$i], $this->_documentXML);
}
$this->_documentXML = str_replace($search, $replace, $this->_documentXML);
}
После этого функция setValue будет работать даже с документами Word 2010.
2 комментария: phpWord setValue не работает в документах Word 2010