0

我希望有人可以帮助我,因为我正在尝试做一些超出我限制的事情,我什至不知道 PHP 或 MySQL 中是否存在此功能,所以我在谷歌上的搜索效率不高。

我在我的 PHP/MySql 项目中使用 PHPWord,目的是我想创建一个基于模板的 word 文档。

我使用了本指南,它也在堆栈交换中。

然而,这种方法需要对行数和值进行硬编码,即在他的示例中,他使用了 cloneRow('first_name', 3),然后将表克隆为 3 行,然后继续手动定义标签,即

$doc->setValue('first_name#1', 'Jeroen');
$doc->setValue('last_name#1', 'Moors');
$doc->setValue('first_name#2', 'John');

我试图使这个动态化,在我的例子中,我试图制定一个时间表,其中一个子表正是如此,所以我的查询查找了有多少条目,然后收集它们的计数,这个然后使用 $count 动态创建正确的行数。这是我正在使用的计数:

$rs10 = CustomQuery("select count(*) as count FROM auditplanevents where AuditModuleFk='" . $result["AuditModulePk"]."'"); 
$data10 = db_fetch_array($rs10);
$Count = $data10["count"];

然后我用它$document->cloneRow('date', $Count);来执行 clonerow 函数,它工作得很好,我的文档现在看起来像这样

所以,到目前为止一切顺利。

我现在想要的是一种将查询的每一行值附加到文档中的方法,而不是手动设置标记值,即$doc->setValue('first_name#1', 'Jeroen');我可以使用类似$doc->setValue('first_name#1', '$name from row 1'); 我怀疑这将涉及 foreach 查询但不太确定的东西。

我希望以上内容是有道理的,但请随时问我其他任何问题,并成为我的个人英雄。谢谢

更新:为了清楚起见,我希望输出看起来像这样:

在我的示例中,有 5 个结果,因此创建了 5 行,我想通过以下方式设置值:

${$date1} = date column from query 1st row
${$date2} = date column from query 2nd row
${$date3} = date column from query 3rd row
${$date4} = date column from query 4th row
${$date5} = date column from query 5th row
4

1 回答 1

0

我可以通过将查询中的记录插入到带有 AI ID 的临时表中来解决这个问题,然后使用:

//update timetable with events from temp table
$rs14 = CustomQuery("select *  FROM tempauditplan where AuditModuleFk='" . $result["AuditModulePk"]."'"); 
while ($data14 = db_fetch_array($rs14))
    {
        $document->setValue('date#'.$data14["rowid"], date('d/m/y', strtotime($data14["date"])));
        $document->setValue('time#'.$data14["rowid"], date('H:i', strtotime($data14["time"])));
        $document->setValue('auditor#'.$data14["rowid"], $data14["auditor"]);
        $document->setValue('area#'.$data14["rowid"], $data14["area"]);
        $document->setValue('notes#'.$data14["rowid"], $data14["notes"]);
        $document->setValue('contact#'.$data14["rowid"], $data14["contact"]);
    }

诀窍是还有一个功能可以在使用后截断表格,以便再次使用

可能不是最有效的方法,但它有效!

于 2015-05-30T16:14:03.683 回答