Ответ 1
setValue ожидает, что второй параметр будет простой строкой. Невозможно предоставить объект раздела.
Я погрузился в код, и там нет простого способа вернуть объект раздела, возвращающий значение, которое может использоваться функцией setValue.
Поскольку у меня была такая же проблема, я написал патч для файла Template.php, который позволяет вам клонировать строки таблицы перед заменой их тегов на setValue. Каждая строка получает уникальный идентификатор, позволяющий идентифицировать теги шаблонов для каждой другой строки.
Вот как это работает:
Добавьте эту функцию в файл Template.php(найденный внутри каталога PHPWord)
public function cloneRow($search, $numberOfClones) {
if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {
$search = '${'.$search.'}';
}
$tagPos = strpos($this->_documentXML, $search);
$rowStartPos = strrpos($this->_documentXML, "<w:tr", ((strlen($this->_documentXML) - $tagPos) * -1));
$rowEndPos = strpos($this->_documentXML, "</w:tr>", $tagPos) + 7;
$result = substr($this->_documentXML, 0, $rowStartPos);
$xmlRow = substr($this->_documentXML, $rowStartPos, ($rowEndPos - $rowStartPos));
for ($i = 1; $i <= $numberOfClones; $i++) {
$result .= preg_replace('/\$\{(.*?)\}/','\${\\1#'.$i.'}', $xmlRow);
}
$result .= substr($this->_documentXML, $rowEndPos);
$this->_documentXML = $result;
}
В вашем файле шаблона добавьте в каждую таблицу одну строку, которую вы будете использовать в качестве строки шаблона. Предположим, вы добавили в эту строку тег ${first_name}.
Чтобы получить таблицу с вызовом из трех строк: $ document- > cloneRow ('first_name', 3);
Рабочая копия вашего шаблона теперь обновляется таблицей, содержащей 3 строки. Каждый тег внутри строки добавлен с номером # и номером строки.
Чтобы установить значения, используйте setValue $ document- > setValue ('first_name # 1', 'Name в первой строке'); $ document- > setValue ('first_name # 2', 'Name во второй строке'); $ document- > setValue ('first_name # 3', 'Name on the third row');
Надеюсь, это полезно! Я сохраню обновленную версию кода и документации здесь: http://jeroen.is/phpword-templates-with-repeating-rows/