我正在使用一个名为 OpenTbs 的库来使用 PHP 创建 odt,我使用它是因为动态生成列和行。
我知道如何创建行和列,但我不知道如何组织它们。
让我添加一个例子:
所以首先我会将其添加到我的 odt 中,
+-- ---------------------------------------------------+ | Thin | Heavy | Total | +------------------------------------------------------+ | [b.date] | | | +------------------------------------------------------+ | [b.thin; | | | | block=tbs:cell; | | | | parallel=tbs:table] | | | | | | | +------------------------------------------------------+ | [b.heavy] | | | +------------------------------------------------------+ | [b.total] | | | +------------------------------------------------------+
然后在我将使用的代码中:
<?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); ?>
输出:
+ --------------------------------------+ | Thin | Heavy | Total | +---------------------------------------+ | 156 | 233 | 110 | +---------------------------------------+ | 128 | 25 | 412 | +---------------------------------------+ | 284 | 284 | 130 | +---------------------------------------+
所有接缝都很好,但是如果我们将其与数组 $data
进行比较$data = array( array('thin' => 156, 'heavy' => 128, 'total' => 284), array('thin' => 233, 'heavy' => 25, 'total' => 284), array('thin' => 110, 'heavy' => 412, 'total' => 130), );
你会看到第一行只显示 thin
| 156 | 233 | 110 |
第二行只显示heavy
| 128 | 25 | 412 |
第三行只显示total
| 284 | 284 | 130 |
现实中应该显示这样的内容:
+ --------------------------------------+ | Thin | Heavy | Total | +---------------------------------------+ | 156 | 128 | 284 | +---------------------------------------+ | 233 | 25 | 284 | +---------------------------------------+ | 110 | 412 | 130 | +---------------------------------------+
然后我意识到,也许将它们添加到彼此下面就是问题所在。 所以不要在 odt 上使用它
+-- ----------------------------------------------+ | Thin | Heavy | Total | +-------------------------------------------------+ | [b.thin; | | | | block=tbs:cell; | | | | parallel=tbs:table] | | | +-------------------------------------------------+ | [b.heavy] | | | +-------------------------------------------------+ | [b.total] | | | +-------------------------------------------------+
我正在用这个
+-- -------------------------------------------+ | Thin | Heavy | Total | +----------------------------------------------+ | [b.thin; | [b.heavy] | [b.total] | | block=tbs:cell; | | | | parallel=tbs:table]| | | | | | | +----------------------------------------------+
输出:
+----------------------------------------------+ | | | | | | +----------------------------------------------+ | 128 | 25 | 412 | 522 | | +----------------------------------------------+
如您所见,它不能很好地迭代数组,并生成空白列,而且显示的数据是随机的
所以如果有人知道这有什么问题,请告诉我
谢谢!
更新
我意识到在 [r.thin;block=tbs:cell;parallel=tbs:table]
中我使用 cell
而不是 row
所以我尝试更改它 -> [r.thin;tbs:row;parallel=tbs:table]
,
它不起作用,但是第一次迭代是正确的:
+ --------------------------------------+ | Thin | Heavy | Total | +---------------------------------------+ | 156 | 128 | 284 | +---------------------------------------+
P粉1166544952024-04-07 16:11:53
关于并行功能
,您得到的结果是正确的。
并行功能
执行一种按列合并,而不是按行合并。
对于按行合并,您的模板可能如下所示:
+---------------------------------------------------------------+ | Row number | Thin | Heavy | Total | +---------------------------------------------------------------+ | [b.#] | [b.thin;block=tbs:row] | [b.heavy] | [b.total] | +---------------------------------------------------------------+
对于按列合并,您的模板可能如下所示:
+-- -----------------------+ | Row number [b.#] | +--------------------------+ | [b.thin; | | block=tbs:cell; | | parallel=tbs:table] | +--------------------------+ | [b.heavy] | +--------------------------+ | [b.total] | +--------------------------+