Scribus : importer un tableau au format CSV


On ne peut pas dire que les tableaux soient bien gérés dans Scribus, on pourrait même dire que c’est une plaie. Quant à importer un tableau depuis un tableur, ce n’est simplement pas à l’ordre du jour…

Une gestion insatisfaisante

Actuellement (version 1.4) un tableau n’est autre qu’un groupe de cadres de texte. Une fois créé, vous ne pouvez ajuster la taille des lignes et des colonnes, vous ne pouvez appliquer de style sur les cellules. La saisie dans une cellule est rendue complexe par le groupe : il faut double-cliquer en pressant la touche Alt pour modifier le contenu d’une cellule.

La version 1.5 (version de développement de la future version stable) propose un nouvel outil de création de tableaux. Il y a même la possibilité d’appliquer des styles sur les cellules et le tableau, mais le peu de paramètres disponibles actuellement rend cette fonction inutile. De toute manière, toujours pas de possibilité d’importer un tableau, il faut le rédiger dans Scribus.

On trouve des tutoriels évoquant la possibilité d’exporter un tableau sous forme d’image vectorielle depuis un tableur comme LibreOffice Calc. Mais le tableau ainsi inséré n’est pas modifiable, y compris au niveau du style. De plus, impossible d’insérer un tableau qui s’étendrait sur plusieurs pages.

Prendre le taureau par les cornes

J’ai donc tenté de résoudre ce problème en vue d’une formation avec des archéologues, qui insèrent de longs tableaux dans leurs rapports. Je suis parti du script importcsv2table.py fourni avec Scribus qui permet d’importer un tableau au format CSV. Le comportement de ce dernier ne me convenait pas et les questions posées étaient trop simplistes. Par exemple, il ne demande pas le caractère de séparation, ce qui est la base du format CSV.

Le format CSV (pour Comma-separated values) permet de représenter un tableau sous forme de valeurs séparées par des virgules (ou d’autres caractères, absents des valeurs). Chaque ligne du texte correspond à une ligne du tableau et les virgules correspondent aux séparations entre les colonnes.

Le script ainsi produit peut être téléchargé ici : importcsv2table.py. Vous devrez ensuite le copier dans un dossier où vous rangez vos scripts pour Scribus : dans votre profil Scribus vous avez un sous-dossier plugins. Ce n’est qu’un exemple, vous pouvez en choisir un autre, du moment que vous le déclarez dans les préférences de Scribus.

Pour le tutoriel vidéo présenté ci-dessous, j’ai utilisé un grand tableau de données issues du site Etalab qui recense les lieux de tournages de films dans Paris. Je l’ai un peu épuré et n’ai gardé que 7 colonnes et 139 lignes, mais ce n’est qu’un exemple, je voulais un tableau avec beaucoup de lignes.

Voici comment l’utiliser en vidéo.

Préparation

  • Créez un nouveau document avec suffisamment de pages pour accueillir votre tableau (cela peut être ajusté par la suite).
  • Allez dans les Préférences pour déclarer le chemin des plugins. C’est là que vous avez copié le script, il sera ainsi plus facile à retrouver depuis Scribus.
  • Créez un cadre de texte occupant tout l’espace que vous voulez allouer à votre tableau sur la première page.
  • Certaines propriétés de ce cadre seront utilisées pour les cellules (constituées elles-mêmes de cadre de texte)
    • la largeur et la hauteur ;
    • la couleur du filet ;
    • l’épaisseur du filet ;
    • les espaces sur les quatre côtés intérieurs (rembourrage ou padding pour les habitués des feuilles de styles CSS).
  • Assurez-vous que le cadre de texte est bien sélectionné et appelez le script via Script → Démarrer un script.

Utilisez le script

S’ensuit une série de questions (je compte regrouper toutes ces fenêtres en une seule à terme).

  • Choisissez le fichier CSV à importer.
  • Indiquez quel est le délimiteur de colonnes (évitez d’avoir la tabulation comme délimiteur).
  • Indiquez la largeur de chaque colonne : cette fenêtre vous indique combien de colonnes comporte votre tableau ; vous devez donc avoir le même nombre de chiffres. Chaque colonne est représentée par un nombre qui indique la part de largeur qu’elle occupera : ainsi, une colonne identifiée par un 3 sera trois fois plus large qu’une colonne identifiée par un 1. La largeur totale du tableau est celle du cadre de texte initial.
  • Si la première ligne de votre tableau est une ligne de titre, elle sera traitée différemment. Pour l’instant, elle n’est juste pas comptabilisée dans la hauteur totale et une place sera réservée pour elle sur chaque page où s’étend le tableau. On peut imaginer à l’avenir qu’elle aura un style particulier et qu’elle sera automatiquement reproduite sur chaque page.
  • La hauteur des cellules est difficile à appréhender tant que vous n’avez pas défini le style de paragraphe des cellules ni vu le résultat. Laissez cette valeur et ajustez-la à la suite de plusieurs essais. Lorsque le nombre de lignes multiplié par la hauteur de chacun dépasse la hauteur du cadre texte initial (donc limitant), un décalage se produira pour bien séparer visuellement les lignes.
  • Choisissez un style de paragraphe pour le contenu des cellules. Cette fenêtre vous affiche les styles existants. Vous pouvez en recopier un ou donner un nouveau nom. Dans ce cas, un nouveau style sera créé.

Patientez, le script travaille.

Affinez

  • Une fois que le script a fini son travail, vous pouvez constater que chaque ligne est un groupe de cadres de texte (ouvrez la fenêtre Plan du document pour vous en convaincre). Vous pouvez donc déplacer une ligne facilement.
  • Allez dans l’éditeur de styles pour modifier le style nouvellement créé. Vos modifications s’appliquent à l’ensemble des cellules !

Traitez les autres pages

  • Allez sur la page suivante.
  • Sélectionnez toutes les lignes et les grouper.
  • Revenez sur la première page et copier la ligne de titre.
  • Retournez sur la page en cours de traitement et coller la ligne de titre.
  • Sélectionnez les deux éléments (ligne de titre et le groupe des autres lignes)
  • À l’aide de la fenêtre Espacer et aligner, faites coïncider le haut du groupe de lignes avec le bas de la ligne de titre.
  • Recommencez pour les autres pages.

Certes, ce n’est pas encore aussi facile que dans d’autres logiciels, mais ce script permet de faire le travail proprement. À noter qu’il fonctionne toujours dans Scribus 1.5 .Malheureusement, il n’est toujours pas possible d’utiliser les nouveaux tableaux dans un script Python, je lance donc un appel du pied !