搜索

首页  >  问答  >  正文

使用opentbs生成odt文件时遇到的问题:相同key的值显示在同一行而不是单独的列中。

我正在使用一个名为 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粉257342166P粉257342166259 天前860

全部回复(1)我来回复

  • P粉116654495

    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]               |
    +--------------------------+

    回复
    0
  • 取消回复