使用while循环时,PhpWord生成了更正的文件

时间:2018-02-12 16:02:55

标签: phpword

我正在使用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++;
}

2 个答案:

答案 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/>,因此它可以正常工作而不会加粗输出。但这对我来说是可以接受的,所以我认为这已经解决了。谢谢你的帮助!!

相关问题