J’ai utilisé gnumeric
, openoffice
, libreoffice
et même excel
parfois,
et utilisés à bon escient, ces outils sont vraiment pratiques.
J’ai aussi souvent généré automatiquement des fichiers csv
,
mais si la fonction principale est remplie, cela présente néanmoins
quelques inconvénients :
- on n’a qu’une feuille par CSV,
- ce n’est pas beau (pas de mise en forme),
- on n’a pas accès aux formules qui ont permis de faire les calculs dans le résultat. On pourrait penser que ce n’est pas très grave, mais cela nuit souvent à la compréhension de ce qui est calculé.
J’ai déjà essayé de générer du format excel à l’aide de la bibliothèque
perl
Spreadsheet::WriteExcel
, mais j'étais tombée sur des problèmes, et
son auteur m’avait conseillé de plutôt utiliser à Excel::Writer::XLSX
,
mais je n’avais pas eu le temps.
Je pense que maintenant, il est plus judicieux de générer du format ODS (Open Document Spreadsheet) qui fait partie de la famille des ODF. (Open Document Format).
J’ai donc essayé ODF::lpOD.
Génération de fichiers .ods avec perl
et ODF::lpOD
#!/usr/bin/perl -w
use strict;
use ODF::lpOD;
Créer un document
Cette bibliothèque permet de créer différents types de document.
Ici, on veut créer une table, et on spécifie donc spreadsheet
:
my $doc = odf_document->create('spreadsheet');
my $contexte = $doc->get_body;
Par défaut, le document contient une feuille nommée Sheet1
.
Ici, on l’enlève pour commencer avec un document vide.
$contexte->clear;
Styles
Une des motivations pour générer du ods
plutôt que du csv
est la possibilité de faire de la mise en forme. Pour cela, il faut
créer des styles. Un style est associé à un type d’objet. Le style table
ne nous intéresse pas ici, car il spécifie l’extérieur de la table quand
celle-ci est incluse dans un autre document (marges, alignement
par rapport aux autres objets, etc). Les styles pertinents ici
sont plutôt :
table row
table column
table cell
Les propriétés les plus utiles des deux premiers portent surtout sur le calcul de la hauteur et la largeur des cellules.
On s’intéresse ici aux styles de type table cell
.
Pour créer un style, il faut par exemple faire :
my $title_style = odf_style->create('table cell',
name => 'Titles',
background_color => 'light blue',
border_bottom => '1mm solid #0000FF'
);
Puis, on peut lui ajouter des propriétés. Il faut savoir que les propriétés
appartiennent à différentes catégories (area
) à l’intérieur même du style.
Ici, on modifie des propriétés de paragraph
(alignement) :
$title_style->set_properties(
area => 'paragraph',
align => 'center'
);
et de text
(fontes, couleur du texte, etc) :
$title_style->set_properties(
area => 'text',
weight => 'bold',
color => 'navy blue'
);
Pour utiliser un style, il faut l’associer au document :
$doc->register_style($title_style);
Pour plus d’information, voir la documentation.
Remplir la table
On s’intéresse uniquement à la construction d’une table, c’est-à-dire ni à la consultation, ni à la modification.
Pour plus d’information, voir la documentation.
On peut accéder aux cases par leur nom habituel (A1
par exemple).
Ici, on change le contenu et le style des deux premières cases :
$feuille->get_cell("A1")->set_text("N");
$feuille->get_cell("A1")->set_style ($title_style);
$feuille->get_cell("B1")->set_text("N+1");
$feuille->get_cell("B1")->set_style ($title_style);
Mais on peut aussi accéder aux cases par leurs coordonnées (ligne, colonne) numérotées à partir de 0, ce qui est quand même plus pratique pour les boucles :
for (my $i = 1 ; $i < 10 ; $i++) {
$feuille->get_cell($i, 0)->set_text($i);
$feuille->get_cell($i, 1)->set_formula("= A" . ($i + 1) . " + 1");
}
On remarque que pour insérer une formule,
il faut utiliser set_formula
au lieu de set_text
.
Sauvegarde
Pour générer le document :
$doc->save(target => "test.ods");
Résultat
Voir le script complet.
Voir aussi :
- Afficher un pourcentage dans une page HTML
- VNC : Virtual Network Computing
- Git : déménagement d'un dépôt
- Quelques liens au sujet de l'analyse statique
- Ocaml: mon principal langage de développement
- Disque dur externe
- Les profiles dans Firefox
- Cryptographie et mail sous Android
- Quelques liens au sujet du C
- Git rebase : pour diviser un commit