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

OpenTBS生成ODT动态列失败求助:无法迭代生成多列

解决OpenTBS生成ODT动态列的报错与数据循环问题

问题根源

  1. block=td报错的原因:ODT文档的表格单元格是XML元素<table:table-cell>,而非HTML的<td>,OpenTBS无法识别td作为块类型,必须使用对应ODT的tbs:cell。
  2. 仅显示第一组数据的原因:模板未正确配置parallel=tbs:table的作用范围,且用纯文本模拟的表格无法被OpenTBS识别为原生表格结构,导致横向循环失效。

正确解决方案

1. 重构ODT模板(必须用原生表格)

在LibreOffice/OpenOffice中插入4行2列的原生表格,然后在对应单元格中插入以下TBS标签:

单元格内容TBS标签
Category[b.date;block=tbs:cell;parallel=tbs:table]
Thin[b.thin;block=tbs:cell]
Heavy[b.heavy;block=tbs:cell]
Total[b.total;block=tbs:cell]

注意:

  • 禁止用纯文本画竖线模拟表格,必须使用ODT的原生表格组件,否则OpenTBS无法解析表格结构。
  • parallel=tbs:table只需添加在第一个循环标签(即[b.date]所在单元格),它会触发整个表格的每行同步生成对应列,实现横向循环。

2. PHP代码无需修改

你的现有PHP代码逻辑正确,直接复用即可:

<?php
include_once('tbs_class.php');
include_once('plugins/tbs_plugin_opentbs.php');

$TBS = new clsTinyButStrong;
$TBS->Plugin(TBS_INSTALL, OPENTBS_PLUGIN);

$TBS->LoadTemplate('template.odt',OPENTBS_ALREADY_UTF8);
$data = array(
    array('date' => '2013-10-13', 'thin' => 156, 'heavy' => 128, 'total' => 284),
    array('date' => '2013-10-14', 'thin' => 233, 'heavy' =>  25, 'total' => 284),
    array('date' => '2013-10-15', 'thin' => 110, 'heavy' => 412, 'total' => 130),
);
$TBS->MergeBlock('b', $data);

// 开启调试可查看详细信息(可选)
// $TBS->Plugin(OPENTBS_DEBUG_INFO, true); 

$output_file_name ="test_download.odt";
$TBS->Show(OPENTBS_DOWNLOAD, $output_file_name); 
?>

效果说明

修改模板后,生成的ODT文档会按照预期横向生成多列数据,每个数组项对应一列,最终效果与你期望的一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:41:32