我使用的是Word文档生成器,用于PHP的Web的应用程序,我正在开发的报告模块。 我选择PHPWord因为PHPDocX的免费版本功能非常有限,再加上它有一个页脚,它仅仅是一个免费的版本。 我有客户端提供的模板。 我要的是我要加载的模板和动态元素添加到它像其他文字或表格。 我的代码是在这里:
<?php
require_once '../PHPWord.php';
$PHPWord = new PHPWord();
$document = $PHPWord->loadTemplate('Template.docx');
$document->setValue('Value1', 'Great');
$section = $PHPWord->createSection();
$section->addText('Hello World!');
$section->addTextBreak(2);
$document->setValue('Value2', $section);
$document->save('test.docx');
?>
我试图创建一个新的部分,并试图将其分配给一个变量在模板(值2),但出现此错误:
[28-Jan-2013 10:36:37 UTC] PHP Warning: utf8_encode() expects parameter 1 to be string, object given in /Users/admin/localhost/PHPWord_0.6.2_Beta/PHPWord/Template.php on line 99
的setValue预计的第二个参数是纯字符串。 这是不可能提供部分对象。
我跳入代码和有没有一个简单的方法有部分对象返回,可以通过的setValue函数中使用的值。
由于我有同样的问题,我已经写了template.php文件中,允许您使用的setValue更换他们的标签之前克隆表行补丁。 每一行获得一个唯一的ID,让您识别模板标签为每个不同的行。
这是如何工作的:
此功能添加到您的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这排。
为了得到表3行称:$文档 - > cloneRow( 'FIRST_NAME',3);
模板的工作副本现在更新包含3行的表。 行内的每个标签已被附加了#和行号。
要设置值,使用的setValue $文档 - >的setValue( '#FIRST_NAME 1', '名称的第一行'); $文档 - >的setValue( '如first_name#2', '第二行名称'); $文档 - >的setValue( '如first_name#3', '第三行名称');
我希望这是有用的! 我会保持代码和文档的更新版本在这里: http://jeroen.is/phpword-templates-with-repeating-rows/
根据该文件,当你使用模板的,你不能将内容添加到该文件。
这是不可能的新PHPWord元素添加到装载的模板文件。
文档
全新版本CloneRow和setValue方法
现在,您可以克隆合并单元格。 与OOXML标签许多错误是固定的。
而新方法SetValue - 现在忽略你的模式里面的垃圾标签。 喜欢
{My<trash ooxml tags>Pattern}
你可以找到的代码,文档和例子在这里: https://github.com/Arisse/PHPWord_CloneRow