You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OpenTBS在PHP项目中从嵌套数组生成Word表格?

使用OpenTBS生成分组表格的问题

我在PHP项目中用OpenTBS导出docx模板,初始代码和模板如下:

初始PHP代码

$surname_list = array(
    'smith' => array(
        array(
            'n_name' => 'jhon',
            'n_surname' => 'smith',
        ),
        array(
            'n_name' => 'mark',
            'n_surname' => 'smith',
        ),
    ),
    'cole' => array(
        array(
            'n_name' => 'jenny',
            'n_surname' => 'cole',
        ),
        array(
            'n_name' => 'dennis',
            'n_surname' => 'cole',
        ),
        array(
            'n_name' => 'paul',
            'n_surname' => 'cole',
        ),
    ),
);

$TBS->MergeBlock('table_block', $surname_list);

初始docx模板内容

[table_block;block=begin]
[block.tbs:table]
Name       | Surname
[n_name]   | [n_surname]
[block.tbs:table;block=end]
[table_block;block=end]

预期效果

希望生成按姓氏分组的多组表格,每个表格对应一个姓氏下的人员列表:

NameSurname
jhonsmith
marksmith
NameSurname
jennycole
denniscole
paulcole

但目前只能迭代主数组生成空表格结构,无法正确填充数据。


更新后的尝试

我修改了数组结构:

$surname_list = array(
        array(
            'surname' => 'smith',
            'people' => array(
                array(
                    'n_name' => 'jhon',
                    'n_surname' => 'smith',
                ),
                array(
                    'n_name' => 'mark',
                    'n_surname' => 'smith',
                ),
            ),
        ),
        array(
            'surname' => 'cole',
            'people' => array(
                array(
                    'n_name' => 'jenny',
                    'n_surname' => 'cole',
                ),
                array(
                    'n_name' => 'dennis',
                    'n_surname' => 'cole',
                ),
                array(
                    'n_name' => 'paul',
                    'n_surname' => 'cole',
                ),
            ),
        ),
    );

    $TBS->MergeBlock('table_block', $surname_list);

并修改模板为:

[table_block;block=begin]
[table_block.surname]
[table_block;block=end]

现在能正确输出姓氏:

smith
cole

但还是无法输出对应的people列表,请问该怎么实现预期的分组表格效果?


解决方案

要实现嵌套分组表格,需利用OpenTBS的嵌套块功能,在父分组块内部定义子块绑定people数组数据。

最终docx模板代码

[table_block;block=begin]
[table_block.surname]
[block.tbs:table]
Name       | Surname
[table_block.people;block=tr]
[n_name]   | [n_surname]
[table_block.people;block=end]
[block.tbs:table;block=end]
[table_block;block=end]

关键说明

  • 父块[table_block;block=begin/end]负责循环每个姓氏分组,生成独立的表格容器和姓氏标题
  • 子块[table_block.people;block=tr/end]绑定当前分组下的people数组,block=tr指定以表格行作为重复单元,每一条人员数据生成一行
  • [block.tbs:table/block=end]用于标记表格结构,确保OpenTBS正确解析表格的行列格式,避免生成格式错误

无需修改你更新后的PHP数组结构和MergeBlock调用,直接使用上述模板即可生成预期的分组表格。


内容的提问来源于stack exchange,提问作者xflea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:27:07