phpWord setValue не работает в документах Word 2010

Вчера я написал статью, в которой описал процесс заполнения 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

  1. Fil говорит:

    если не работает
    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);
    }

  2. Fil говорит:

    класс годный, только метод замены подкачал…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>