使用opentbs產生odt檔案時遇到的問題:相同key的值顯示在同一行而不是單獨的欄位中。
P粉257342166
P粉257342166 2024-04-06 20:18:18
0
1
701

我正在使用一個名為 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粉257342166
P粉257342166

全部回覆(1)
P粉116654495

關於並行功能,您得到的結果是正確的。 並行功能執行一種按列合併,而不是按行合併。

對於按行合併,您的範本可能如下所示:

+---------------------------------------------------------------+
| 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]               |
+--------------------------+
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!