使用PHPWord进行动态表行

时间:2015-05-30 10:48:36

标签: php mysql phpword

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

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

我已经使用了guide,这也是堆栈交换。

然而,这种方法要求行数和值是硬编码的,即在他的例子中他使用了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函数,这很好用,我的文档现在看起来像this

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

我现在想要的是一种方法然后将查询的每一行值附加到文档中,而不是手动设置标记值,即$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

1 个答案:

答案 0 :(得分: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"]);
    }

诀窍是还有一个在使用后截断表的函数,因此可以重复使用

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