Problèmes rencontrés lors de l'utilisation d'opentbs pour générer des fichiers odt : les valeurs d'une même clé sont affichées dans la même ligne au lieu de colonnes séparées.
P粉257342166
P粉257342166 2024-04-06 20:18:18
0
1
480

J'utilise une bibliothèque appelée OpenTbs pour créer odt en utilisant PHP, je l'utilise en raison de la génération dynamique de colonnes et de lignes.

Je sais comment créer des lignes et des colonnes, mais je ne sais pas comment les organiser.

Permettez-moi d'ajouter un exemple :

Alors je vais d'abord ajouter ceci à mon odt,

+-- ---------------------------------------------------+
|    Thin              |    Heavy   |      Total       |
+------------------------------------------------------+
| [b.date]             |            |                  |
+------------------------------------------------------+
| [b.thin;             |            |                  |
| block=tbs:cell;      |            |                  |
|  parallel=tbs:table] |            |                  |
|                      |            |                  |
+------------------------------------------------------+
| [b.heavy]            |            |                  |
+------------------------------------------------------+
| [b.total]            |            |                  |
+------------------------------------------------------+

Ensuite dans le code j'utiliserai :

<?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); 
?>

Sortie :

+ --------------------------------------+
|    Thin    |    Heavy   |   Total     |
+---------------------------------------+
| 156        | 233        | 110         |
+---------------------------------------+
| 128        | 25         | 412         |
+---------------------------------------+
|  284       | 284        | 130         |
+---------------------------------------+

Tout va bien, mais si on le compare au tableau $data

$data = array(
    array('thin' => 156, 'heavy' => 128, 'total' => 284),
    array('thin' => 233, 'heavy' =>  25, 'total' => 284),
    array('thin' => 110, 'heavy' => 412, 'total' => 130),
);

Vous verrez que la première ligne ne montre que thin

| 156 | 233 | 110 |

La deuxième ligne affiche uniquement heavy

| 128 | 25 | 412 |

La troisième ligne affiche uniquement total

| 284 | 284 | 130 |

En réalité, un contenu comme celui-ci devrait être affiché :

+ --------------------------------------+
|    Thin    |    Heavy   |    Total    |
+---------------------------------------+
|    156     |    128     |    284      |
+---------------------------------------+
|    233     |    25      |    284      |
+---------------------------------------+
|    110     |    412     |    130      |
+---------------------------------------+

Ensuite, j'ai réalisé que le problème était peut-être de les ajouter les uns sous les autres. Alors ne l'utilisez pas sur odt

+-- ----------------------------------------------+
|           Thin           |  Heavy   |  Total    |
+-------------------------------------------------+
| [b.thin;                 |          |           |
| block=tbs:cell;          |          |           |
| parallel=tbs:table]      |          |           |
+-------------------------------------------------+
| [b.heavy]                |          |           |
+-------------------------------------------------+
|  [b.total]               |          |           |
+-------------------------------------------------+

J'utilise ceci

+-- -------------------------------------------+
|    Thin             |    Heavy   |  Total    |
+----------------------------------------------+
|  [b.thin;           |  [b.heavy] | [b.total] |
|  block=tbs:cell;    |            |           |
|  parallel=tbs:table]|            |           |
|                     |            |           |
+----------------------------------------------+

Sortie :

+----------------------------------------------+
|          |         |         |       |       |
+----------------------------------------------+
|   128    |   25    |   412   |  522  |       |
+----------------------------------------------+

Comme vous pouvez le voir, il ne parcourt pas bien le tableau et produit des colonnes vides et les données affichées sont aléatoires

Donc, si quelqu'un sait ce qui ne va pas, faites-le-moi savoir

Merci !

Mise à jour

Je m'en suis rendu compte en [r.thin;block=tbs:cell;parallel=tbs:table] 中我使用 cell 而不是 row

Alors j'ai essayé de le changer -> [r.thin;tbs:row;parallel=tbs:table]Cela ne fonctionne pas, mais la première itération est correcte :

+ --------------------------------------+
|    Thin    |    Heavy   |   Total     |
+---------------------------------------+
| 156        | 128        | 284         |
+---------------------------------------+

P粉257342166
P粉257342166

répondre à tous(1)
P粉116654495

Concernant le parallélisme 功能, les résultats que vous avez obtenus sont corrects. Parallel 功能 effectue une fusion par colonne au lieu d'une fusion par ligne.

Pour une fusion par lignes, votre modèle pourrait ressembler à ceci :

+---------------------------------------------------------------+
| Row number | Thin                     |  Heavy    |  Total    |
+---------------------------------------------------------------+
| [b.#]      | [b.thin;block=tbs:row]   | [b.heavy] | [b.total] |
+---------------------------------------------------------------+

Pour une fusion par colonne, votre modèle pourrait ressembler à ceci :

+-- -----------------------+
|  Row number [b.#]        |
+--------------------------+
| [b.thin;                 |
| block=tbs:cell;          |
| parallel=tbs:table]      |
+--------------------------+
| [b.heavy]                |
+--------------------------+
|  [b.total]               |
+--------------------------+
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!