我正在使用PhpWord生成.docx文件,它工作正常,直到我使用while循环。我确信这是一件很简单的事情我对使用表格/行感到遗憾,但我还没有找到具体的答案。如果我发表评论并保持其余部分完好无损,那就行了。这是循环导致问题的原因。我尝试在while循环之外使用addTable(),除了我的addText之外没有区别(" Step" ....显示在表之后而不是之前我想要它。我和# 39;我尝试了不同的组合,但希望有人在这里有一个想法,如果我必须以某种方式关闭桌子或其他东西循环或什么?谢谢。
$y=1;
$z=1;
While ($z<=count($me_events)) {
$section->addText($me_events[$z] . " (Protocol ID: " . $me_pid[$z] . ")", array('name' => 'Arial', 'size' => 10));
$section->addText("me_pid is set to " . $me_pid[$z] . " and sprot_id is set to " . $sprot_id[$y]);
if($me_pid[$z] == $sprot_id[$y]) {
while ($me_pid[$z] == $sprot_id[$y]) {
$section->addText("Step " . $sorder[$y] . " - " . $sdesc[$y] . " (Step Wait: " . $swait[$y] . ")");
$table = $section->addTable($tableStyle);
$table->addRow();
if ($ctext[$y]=="") {
$table->addCell(8000)->addText("\t" . $sscript[$y]);
} else {
$table->addCell(8000)->addText("\t" . $ctext[$y]);
if ($sscript[$y]<>"") {
$table->addCell(8000)->addText("\t" . $sscript[$y]);
}
}
$y++;
$section->addTextBreak(1);
}
}
$section->addPageBreak();
$z++;
}
答案 0 :(得分:0)
好的,所以将答案移到实际答案而不仅仅是评论。
问题1(addText在循环内失败)
当你在里面有html /特殊字符时,addText失败,所以通常应该使用:
addText(htmlspecialchars("your text here", ENT_COMPAT, 'UTF-8'));
问题2(如何使用addHtml将html内容插入单元格)
您可以使用addHtml将内容插入容器 - 在本例中为表格单元格:
$cell = $table->addCell(8000);
\PhpOffice\PhpWord\Shared\Html::addHtml($cell, "<strong>HTML CONTENT</strong><br/><em>test</em>");
请注意,addHtml
似乎无法识别<b>
&amp; <i>
标记,但它确实识别<strong>
&amp; <em>
个。此外,您需要使用<br>
代替<br/>
(如果html数据超出您的范围,我认为您可以轻松搜索并替换这些标记)。
答案 1 :(得分:0)
我使用str_replace从我的代码中删除了<b>
和</b>
标记,我们已经使用了<br/>
,因此它可以正常工作而不会加粗输出。但这对我来说是可以接受的,所以我认为这已经解决了。谢谢你的帮助!!