diff --git a/Classes/PHPWord/Template.php b/Classes/PHPWord/Template.php index eb6e42d2..3adb44a4 100755 --- a/Classes/PHPWord/Template.php +++ b/Classes/PHPWord/Template.php @@ -121,6 +121,35 @@ class PHPWord_Template preg_match_all('/\$\{(.*?)}/i', $this->_documentXML, $matches); return $matches[1]; } + + /** + * Clone a table row in a template document + * + * @param mixed $search + * @param mixed $numberOfClones + */ + public function cloneRow($search, $numberOfClones) { + if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') { + $search = '${'.$search.'}'; + } + + $tagPos = strpos($this->_documentXML, $search); + if (!$tagPos) { + trigger_error("Can not clone row, template variable not found or variable contains markup."); + return false; + } + $rowStartPos = strrpos($this->_documentXML, "_documentXML) - $tagPos) * -1)); + $rowEndPos = strpos($this->_documentXML, "", $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; + } /** * Save Template diff --git a/samples/Sample_03_TemplateCloneRow.docx b/samples/Sample_03_TemplateCloneRow.docx new file mode 100644 index 00000000..909f27ab Binary files /dev/null and b/samples/Sample_03_TemplateCloneRow.docx differ diff --git a/samples/Sample_03_TemplateCloneRow.php b/samples/Sample_03_TemplateCloneRow.php new file mode 100755 index 00000000..eac91b86 --- /dev/null +++ b/samples/Sample_03_TemplateCloneRow.php @@ -0,0 +1,35 @@ +loadTemplate('Sample_03_TemplateCloneRow.docx'); + +$document->cloneRow('rowValue', 10); + +$document->setValue('rowValue#1', 'Sun'); +$document->setValue('rowValue#2', 'Mercury'); +$document->setValue('rowValue#3', 'Venus'); +$document->setValue('rowValue#4', 'Earth'); +$document->setValue('rowValue#5', 'Mars'); +$document->setValue('rowValue#6', 'Jupiter'); +$document->setValue('rowValue#7', 'Saturn'); +$document->setValue('rowValue#8', 'Uranus'); +$document->setValue('rowValue#9', 'Neptun'); +$document->setValue('rowValue#10', 'Pluto'); + +$document->setValue('rowNumber#1', '1'); +$document->setValue('rowNumber#2', '2'); +$document->setValue('rowNumber#3', '3'); +$document->setValue('rowNumber#4', '4'); +$document->setValue('rowNumber#5', '5'); +$document->setValue('rowNumber#6', '6'); +$document->setValue('rowNumber#7', '7'); +$document->setValue('rowNumber#8', '8'); +$document->setValue('rowNumber#9', '9'); +$document->setValue('rowNumber#10', '10'); + +$document->setValue('weekday', date('l')); +$document->setValue('time', date('H:i')); + +$document->save('SolarsystemRepeatingRows.docx');