2015-08-02 4 views
3

Я хочу создать текстовый файл .docx по моим данным, которые есть в базе данных. Для выполнения этой задачи я использую phpword 0.12.0. Мне нужно нарисовать таблицу, чтобы поместить в нее данные. После этого мне нужно получить каждую строку из таблицы в базе данных, чтобы автоматически перейти в ячейку новой строки. я могу сделать эту работу сКак перейти к новой строке в ячейке в таблице в phpword?

$section->addTextBreak(); 

, но без таблицы, теперь, как я могу сделать эту работу в ячейке внутри таблицы? Я использую ниже код, но он не работает.

$area=array(); 
$axis=array(); 
$topic=array(); 
$table->addRow(900); 
$table->addCell(2000, $styleCell)->addText(htmlspecialchars('test1'), $fontStyle); 
$table->addCell(2000, $styleCell)->addText(htmlspecialchars('test2'), $fontStyle); 
$table->addCell(2000, $styleCell)->addText(htmlspecialchars('test3'), $fontStyle); 
$table->addCell(2000, $styleCell)->addText(htmlspecialchars('test4'), $fontStyle); 
for ($i = 0; $i < 4; $i++) { 
     $table->addRow(); 
     $table->addCell(2000)->addText(htmlspecialchars($topic{$i}),array('name' => 'Segoe UI Semilight')); 
     $table->addCell(3000)->addText(htmlspecialchars($axis{$i}),array('rtl' => true,'name' => 'Segoe UI Semilight')); 
     $table->addCell(2000)->addText(htmlspecialchars($area{$i}),array('rtl' => true,'name' => 'Segoe UI Semilight')); 
     $table->addCell(2000)->addText(htmlspecialchars($i),array('rtl' => true,'name' => 'Segoe UI Semilight')); 
} 
+0

так, что именно проблема? Вышеприведенный код работает нормально - если у вас есть несколько реальных массивов с 4 или более элементами для массива области, оси и темы, то есть - он создает таблицу с тестовыми ячейками в первой строке и новых строках в каждом цикле. У вас есть некоторые проблемы с запросом базы данных или с созданием содержимого таблицы? – ejuhjav

ответ

3

Вы должны сначала создать объект клеток, а затем использовать AddText

$c1=$table->addCell(2000); 
    $c1->addText("Cell 1"); 
    $c1->addText("New line"); 
+1

добавьте немного объяснений –

0

Как @Milaza отметил, вы можете

// define the cell 
$cell = $table->addCell(2000); 

// add one line 
$cell->addText("Cell 1"); 

// then add another one 
$cell->addText("New line"); 

Я думаю, что это раздражает, так как у меня есть сломать строку текста на несколько строк, и у меня много текста ячейки, чтобы сломаться. Так что я создал (2016-11-08) метод в PHPWord/src/PhpWord/Element/Cell.php:

/** 
* Add multi-line text 
* 
* @return \PhpOffice\PhpWord\Style\Cell 
*/ 
public function addMultiLineText($text, $fStyle = null, $pStyle = null) 
{ 
    // break from line breaks 
    $strArr = explode('\n', $text); 

    // add text line together 
    foreach ($strArr as $v) { 
     $this->addText($v, $fStyle, $pStyle); 
    } 
    return $this; 
} 

Он разбивает текстовую строку из \n знака.

Итак, когда вы добавляете ячейку, вы можете использовать его как:

// "$fStyle", "$pStyle" are the old "$fStyle", "$pStyle" you pass to old "addText" method 
$table->addCell(2000)->addMultiLineText("Line 1\nLine 2", $fStyle, $pStyle); 

Результат будет выглядеть так:

Line 1 
Line 2 

Если вы не хотите изменять исходный код, я уже добавили его здесь.

https://github.com/shrekuu/PHPWord

https://packagist.org/packages/shrekuu/phpword

Вы можете просто установить этот запустив:

composer require shrekuu/phpword