Suite bureautique OpenOffice.org

Généralités

Enregistrer sous… en HTML donne un code du moyen âge avec des balises en majuscules et des valeurs sans guillemets. Exporter… en XHTML donne un code plus civilisé, mais en une seule ligne sans retour, qui plante certains éditeurs quand le document est gros, surtout les éditeurs qui essayent de colorer le code ou qui permettent d’ouvrir et fermer les blocs. Le code est toujours compliqué parce qu’OOo essaie de conserver le plus possible d’information de mise en page de la version papier, pour pouvoir y retourner au besoin. J’ai obtenu de beaucoup meilleurs résultats après avoir installé l’extension openoffice.org-writer2xhtml liée au programme Writer2LaTeX. Elle est dans les paquets Universe. Il vaut donc mieux la prendre dans un dépôt Ubuntu que sur le site SourceForge.

Traitement de texte OpenOffice.org Writer

Question de format de page

Pour changer de format de page (par exemple, dans un document portrait, une page paysage pour accueillir un tableau), il faut d’une part définir un autre style de page, d’autre part isoler la page par l’insertion de sauts de page manuels (ça ne fonctionne pas avec un paragraphe qui aurait la propriété saut de page avant). Concrètement, on laisse le reste du document en style de page Standard, par exemple, et on définit dans le gestionnaire de styles (F11) un style de page d’un autre nom, disons Paysage, avec la propriété paysage. Il faut alors insérer un saut de page manuel après la page paysage et un autre avant en donnant à ce dernier le style défini Paysage dans la boîte de dialogue de l’insertion de saut (ça ne fonctionne pas en donnant le style après coup : le style serait alors donné à toutes les pages). C’est assez tordu, mais c’est comme ça

Publipostage ou autres documents personnalisés

Le Word de Microsoft gère le plublipostage entièrement en interne. Sur une machine où ni Excel ni Access ne seraient installés, on peut en Word faire des lettres personnalisées à partir d’une liste d’adresses en Word. Si on a Excel ou Access, on peut le faire aussi à partir de tables de ces programmes, mais c’est Word seul qui fait le travail. Par contre, le traitement de texte Writer d’OpenOffice.org confie toujours à OpenOffice.org Base le soin de gérer les données et de les lui communiquer, quelle que soit leur origine. Ou bien les données sont dans Base, ou bien une base de données Base est créée pour faire le lien avec les données dans un fichier produit par une autre application.

En outre, comme on le verra ci-dessous, la base de données Base doit être enregistrée dans les options générales d’OpenOffice.org, donc sur sur l’ordinateur où on travaille. Il ne suffit pas que la base de données soit présente sur un disque accessible. De plus, la référence ne se fait pas au fichier mais au nom sous lequel la base est enregistrée. Méfiez vous en passant d’un ordinateur à un autre. Vous pourriez avoir la bonne base de données, disons, adresses.odb, dans exactement la même structure de répertoires que sur l’autre ordinateur, mais que ça ne marche pas parce que d’un côté vous auriez enregistré adresses.odb sous le nom « Adresses » et de l’autre sous le nom « adresses » ou « Famille et amis ».

Lettres ou autres documents personnalisés par page

Je suppose que je pars d’un document modèle de ce que je voudrais personnaliser. J’ai par exemple une LettreTartempion.odt comme exemple. Je la sauve comme LettreAuto.odt et c’est ce document que je vais travailler pour qu’il me donne les documents personnalisés. (Je mets « Auto » dans le nom de fichier pour me souvenir de ce que c’est un document spécial, dynamique, pas un document habituel.) J’ai des adresses et d’autres données sur les personnes dans une table ListeDonnées.calc.

Il faut commencer par faire connaître ces données à Base. Dans OpenOffice.org, je demande un nouveau document de type Base de données et dans la boîte de dialogue, je choisis Se connecter à une base de données existante. Dialogue suivant : Parcourir, je sélectionne le fichier ListeDonnées.calc. Dialogue suivant : Oui, je souhaite que l’assistant enregistre la base de données. Si les données sont parfaitement en ordre et qu’on n’a pas l’intention d’ajouter ou de modifier encore les données maintenant, on ne coche pas Ouvrir la base de données pour édition. Terminer ouvre le dialogue d’enregistrement. Je choisis comme nom de fichier, par exemple, ListeDonnées.odb. Ce fichier ne contient pas une copie du contenu de ListeDonnées.calc mais seulement un renvoi, et ça se voit à la légereté du fichier .odb. Cette opération ne doit être faite qu’une fois pour un ensemble de données. On peut ensuite modifier la ListeDonnées.calc et utiliser encore le document personnalisé LettreAuto.odt ou créer un autre document automatique utilisant les mêmes données à travers ListeDonnées.odb. Si le fichier Calc contient plusieurs feuilles, on a plusieurs tables avec lesquelles on peut personnaliser des documents tout à fait différents. J’ai expérimenté la chose avec des données venant de Calc, mais Base se connecte à une grande variété de bases de données et ça devrait fonctionner tout aussi bien.

On peut bien sûr partir d’une vraie base de données .odb existante ou créée pour l’occasion. Il faut cependant l’enregistrer, ce qui se fait dans les options générales d’OpenOffice.org : dans n’importe quelle application OOo, menu Outils, commande Options, dans l’abre, développer la branche OpenOffice.org Base et sélectionner Base de données. Dans le volet de droite, cliquer Nouveau et cetera.

Mon document LettreAuto.odt n’est toujours qu’une copie du document ordinaire LettreTartempion.odt. Pour en faire un document automatique, je dois l’ouvrir dans le traitement de texte d’OOo et demander l’affichage de la source de données dans le menu Affichage, commande Source de données (raccourci clavier F4 ou icone de sources de données dans la barre standard). Un volet s’ouvre au dessus de la fenêtre d’édition de texte et on voit la base de données ListeDonnées, éventuellement parmi d’autres qu’on aurait enregistrées à d’autres occasion (ou qu’OOo propose d’office). (Si une base de données présente sur le disque n’est pas donnée ici à choisir, il faut aller dans Outils/Options/OpenOffice.org Base/Bases de données, cliquez sur Ajouter et sélectionner le fichier de base de données.) Cliquer le + devant le nom, puis devant Tables, ce qui a pour effet de déclencher la liaison au contenu de ListeDonnées.calc. Choisir la table (l’onglet, la feuille de Calc) qui contient les données. Je n’ai encore essayé que des tables, mais on pourrait, avoir créé des requêtes dans ListeDonnées.odb et personnaliser les documents à partir d’une requête.

Cela étant, on peut faire glisser les noms de champ (les en-têtes de colonne) de la table dans le texte type aux endroits voulus. Enregistrer le document automatique, c’est toujours ça de sauvé si on fait une erreur ou si l’ordinateur se plante. Si on veut imprimer les documents personnalisés issus du document automatique, il faut demander l’impression de celui-ci. La boîte de dialogue d’impression d’un document automatique donne le choix d’imprimer celui-ci ou ses « produits ». (Voulez-vous imprimer une lettre type ?Oui.) Mais on préfère sans doute tester le résultat avant de gaspiller du papier. Il faut savoir que cette commande imprimer, si l’on a choisi lettre type, permet aussi d’ « imprimer » dans un fichier et de choisir tout ou partie des enregistrements.

Si on sélectionne une ligne dans le volet des données, une icone permet d’obtenir les Données dans les champs, c’est-à-dire de réaliser dans le volet de traitement de texte le document personnalisé pour cette ligne de données. (L’aperçu avant impression donne alors une vue de ce document personnalisé.) La commande Enregistrer sous… enregistre toujours le document automatique, pas l’exemple personnalisé. Par contre, l’exportation PDF exporte l’exemple de document personnalisé qu’on a à l’écran. Cela étant fait, on revient à l’affichage des noms de champs par la commande Noms de champs du menu Affichage.

Une des icones ouvre un assistant mailing qui produit tous les documents personnalisés comme pages d’un nouveau document. (Aussi menu Outils, commande Assistant mailing…) Le fait de sélectionner plusieurs noms ne dissuade pas l’assistant de les produire tous. C’est seulement après qu’on peut choisir de n’en enregistrer (ou imprimer) qu’une partie. Il m’est arrivé plusieurs fois que l’assistant prétende commencer à un autre enregistrement que le premier et rien à faire pour en sortir. En fait l’assistant n’est intéressant que comme aide à la compostion du document. La commande Imprimer (menu Fichier) décrite plus haut est plus simple et plus fiable.

Quand on rouvre le document, la liaison aux données reste (on pourrait imprimer les documents personnalisés) mais le volet de données ne s’affiche pas de lui-même. Demander la source des données comme plus haut (F4 par exemple).

Si on clique du bouton droit sur un champ dans le texte, on a une commande Champs (qui est aussi celle du menu Édition). Si on fait Ctrl+F2 avec le curseur devant le champ, on a la commande Champs, Autres… du menu Insertion qui offre beaucoup plus de fonctionnalités./p>

Documents personnalisés en liste (rapports, catalogues…)

Par défaut (sauf si on est passé par la commande Étiquettes comme ci-après), OpenOffice.org passe à une nouvelle page par enregistrement. Si on veut un résultat sous forme de liste, il faut créer le passage de texte contenant les champs voulus pour le premier enregistrement, puis recopier ce passage pour le deuxième enregistrement. Il faut alors devant ce deuxième passage, forcer l’avancement à l’enregistrement suivant : Ctrl+F2, ou menu Insertion, commande Champs, Autres…, onglet Bases de données, Type de champ : Enregistrement suivant. Il faut alors recopier le deuxième passage (en faisant attention de remprendre ce champ initial peu visible) pour le coller comme troisième et suivants. Il faut en coller autant que d’enregistrements. Si vous en mettez moins, il y aura un changement de page pour la suite. (Dans le Word de Microsoft Office, il y avait une option catalogue dans le publipostage. On devait alors seulement composer le passage voulu pour un enregistrement et le passage était répété automatiquement jusqu’à la fin. Je n’ai pas trouvé l’équivalent dans OpenOffice.org et, à en juger par les plaintes dans les forums, ça n’existe pas.)

Autre méthode très rapide, avec moins de possibilité de mise en forme, mais sans la limitation de devoir préparer en fonction du nombre d’enregistrements prévus : dans un nouveau document ouvert et avec le navigateur de données ouvert (F4) glisser dans le volet du document la table (ou la requête) directement du navigateur (volet de gauche) (et non les titres de colonnes de l’affichage des données comme en publipostage ci-dessus).

Cela ne permet pas des documents de présentation sophistiquée mais c’est le moyen le plus simple de lister des données, infiniment plus rapide et plus simple que les rapports d’OpenOffice.org Base.

Étiquettes

Il faut commencer par composer une planche d’étiquettes avec la commande Étiquettes du menu Fichier et ses différents onglets. Dans le premier onglet, Étiquettes, on choisit un format d’étiquettes (on pourra raffiner ensuite). Par exemple, Marque : Avery A4, Type : J8157 Address donne un bon format de 11 lignes de 3 étiquettes sur une page A4. Dans cet onglet, on ouvre aussi la base de données et la table et on fait passer dans une étiquette encore schématique les noms de champs désirés. Dans l’onglet Format, on peut raffiner les dimensions, mmarges, écarts… Dans l’onglet Options, il faut choisir Synchroniser le contenu pour que les étiquettes suivantes reproduisent la première. Lorsque tous les choix sont faits, on demande Nouveau document et on se trouve devant une page d’étiquettes. Un bouton Synchroniser les étiquettes flotte devant la page. Si fait des fioritures dans la première étiquette (ponctuation, espaces, gras, italique, insertion d’un logo…), on clique le bouton pour appliquer la même modification à toutes les autres étiquettes.

On continue comme pour la personnalisation par page en affichant la source de données par F4 et en appelant l’assistant de Mailing pour enregistrer ou imprimer le résultat.

Dans l’hypothèse où on a sa propre mise en page d’étiquettes en tableau à laquelle on est attaché (parce qu’on a raffiné la dimension et placé dans chaque cellule un logo, bref parce que ça existe et qu’on ne veut pas recommencer), on pourrait travailler comme dans cas de la personnalisation par page plus haut, mais on ne bénéficie alors pas du bouton Synchroniser les étiquettes. Il faut recopier soi-même les champs et autres éléments de contenu dans chaque cellule du tableau et, à moins de vouloir toute une page de la même étiquette pour chaque personne, il faut devant le premier champ de la deuxième étiquette, et de même pour chacune des suivantes, avec Ctrl+F2, onglet Base de données, sélectionner sous Type d’enregistrement la ligne Enregistrement suivant avec la condition TRUE.

Tableur OpenOffice.org Calc

Rien à raconter.

Base de données OpenOffice.org Base

OpenOffice.org Base est d’une lenteur désespérante. Je ne sais pas si j’ai un bug dans mon installation. Il faut peut-être une machine superpuissante avec des tonnes de mémoire.

Importation de données dans une base

On a vu dans le publipostage comment se lier à une base de données externe. Il ne semble pas possible de transformer des tables externes liées en tables internes. OpenOffice.org Base dispose aussi d’une fonctionalité d’importation de tables, bien cachée (comme trop souvent en OpenOffice.org) : elle n’apparait comme telle ni dans les commandes de menu ni dans l’aide. On la trouve cependant dans des documents d’aide en PDF sur les sites d’OpenOffice.org et dans différents forums ou How To sur le sujet.

En deux mots : dans une base de données OpenOffice.org Base, on peut coller comme table des données copiées d’une table d’OpenOffice.org Calc.

Concrètement :

  1. Pour arriver dans Base, les données devraient se retrouver d’abord dans Calc. Si ce sont des tableaux de Word, des feuilles de calcul d’Excel ou des tables d’Access ou d’autres encore, commencer par sauver les données en format .xls d’Excel. S’il s’agit de données lisibles par des applications qui ne sauvent pas dans le format d’Excel, sauver en format.csv (CSV, Comma Separated Values, texte séparé par des virgules, ou des points-virgules) ou dans un autre format (je pense à .dbf) que Calc peut lire.
  2. Ouvrir ou créer la base de données OpenOffice.org. Se débarasser de tous les assistants de manière à avoir l’écran principal de l’application et y choisir Tables sous Base de données.
  3. Ouvrir les données dans OpenOffice.org Calc. (En ouvrant un fichier .csv faudra indiquer quel est le codage des caractères, si c’est virgule ou point-virgule qui sépare les champs et si les champs sont délimités par des guillemets.) Veiller à avoir une ligne de nom de champs en tête des données. (L’ajouter au besoin.) Sélectionner toute la zone des données voulues (qui peut être une partie seulement de la feuille) en incluant sa ligne de noms de champs. Copier.
  4. Dans OpenOffice.org Base, faire Édition, Coller. (On peut aussi cliquer le bouton Coller de la barre de boutons. On peut aussi cliquer du bouton droit dans le vide sous le titre Tables de la fenêtre de l’application). Une boîte de dialogue demande d’abord le nom de la table, ce qu’on veut importer, habituellement les noms de champs et les données et si on veut créer une clef primaire. Une clef primaire est une bonne idée sauf si on sait qu’on pourra utiliser un ou plusieurs champs de données comme clef. Cliquer Suivant. Le dialogue suivant permet de choisir les champs à importer en les faisant passer de la colonne de gauche à la colonne de droite. On peut sélectionner tout. Cliquer Suivant. Maintenant, il faut pour chaque champ choisir son type et sa longueur. Sélectionner un champ après l’autre et le paramétrer avant de cliquer de bouton. En cliquant du bouton droit sur un ou plusieurs champs, on peut constituer ce ou ces champs en clef primaire. On peut aussi laisser Base procéder à une reconnaissance automatique du type des champs à la lecture de quelques lignes de données : indiquer le nombre de lignes à lire (je suppose que plus de lignes prend plus de temps mais améliore le résultat) et cliquer Auto. Il faut alors quand même revoir un à un les types de champ pour vérifier. Tous ces choix doivent être faits très soigneusement parce que le changement ultérieur de type entraîne généralement la perte des données. Quand on est vraiment sûr, on fait Créer. (Si on a oublié de créer une clef primaire, on a ici un rappel.) Avec le temps qu’il faut (ne pas croire trop vite que l’application s’est plantée) et un peu de chance, on a la table voulue.

Ajouter des données à une table existante (Append)

En gros la même chose que ci-dessus, mais dans la boîte de dialogue de Coller, il faut choisir Ajouter des données et entrer le nom de la table existante. Si la table est sélectionnée quand on fait Édition, Coller ou si on clique du bouton droit sur le nom de la table pour Coller, le nom de la table et le choix Ajouter… seront déjà activés dans le dialogue.

Remarques diverses

Requêtes

Vues et requêtes

Je crois avoir compris ceci de la nuance entre vues et requêtes. Dites-moi si je me trompe. Sinon, je ne trouve pas de conseil d’utilisation de l’une plutôt que l’autre.

Une vue est une table dynamique, virtuelle, dans le moteur de bases de données (HSQL, MySQL…). Elle est définie par un code écrit comme une requête SQL. Elle est enregistrée au niveau de la base de données elle-même.

Une requête est une commande envoyée au moteur de base de données. Comme Base enregistre les requêtes, elles ont apparemment la même permancence. Mais il faut comprendre que Base n’est qu’une interface de gestion d’une base de données. Même si on n’a soi-même installé aucune base de données particulière, Base en fournit une par défaut, HSQL et on se trouve quand même devant deux niveaux, la base de données HSQL et l’application bureautique Base. Un utilisateur de Writer ou de Calc ne connaît pas ce problème et on tend à confondre les deux niveaux, la base de données et l’application bureautique qui nous aide à la gérér. Les vues sont enregistrées dans la base de données (si elle le permet) tandis que les requêtes restent au niveau d’OpenOffice.org et sont envoyées chaque fois au moteur de base de données pour être exécutées.

Escape Processing

Les exigences de HSQL et de Base en matière de syntaxe SQL ne sont pas les mêmes. J’ai réussi à écrire des SELECT CASE WHEN… ELSE… END AS… dans une requête, et puis le même code était refusé dans toutes les autres pour erreur de syntaxe. Il y avait de quoi devenir fou. J’ai découvert dans une page de wiki du site OpenOffice.org que cela dépend de Escape Processing et que ça marche si on clique le bouton SQL de la barre d’outils SQL dans l’éditeur SQL. Ma requête était acceptée et les autres pas parce que dans l’une j’avais cliqué le bouton sans savoir. Il semble que dans l’édition d’une vue, ça marche toujours. Je ne sais toujours pas ce qu’Escape Processing veut dire et ça ne ferait pas de mal à OpenOffice.org d’être mieux documenté, mais je suis content que ce truc marche.

By the way, dans l’édition habituelle d’une requête, il ne sert à rien d’embellir son code en allant à la ligne et en identant des lignes : cela est perdu à l’enregistrement. Il est est autrement dans l’édition d’une vue, ou dans l’édition d’une requête où l’on a cliqué le bouton SQL. Le code reste alors indenté. Dans l’édition de la requête, OpenOffice.org contrôle la syntaxe, en donnant parfois des arreurs abusives. Cliquer le bouton SQL de la fenêtre d’édition de requête en SQL semble vouloir dire : envoyer cette requête SQL directement à la base sous-jacente, sans contrôle.

Sortie de données de la base

L’application OpenOffice.org Base comporte différentes fonctionnalités de rapport que je n’ai pas trouvé faciles à utiliser. À mon avis, le plus simple et le plus efficace est la sortie de données de Base dans un texte ou un tableur, comme décrit plus haut sous Publipostage et plus particulièrement comme Autre méthode très rapide. (Cet exposé aurait sa place ici, mais j’y ai été amené naturellement à partir du publipostage et une chose entrainant l’autre…)

Le menu Fichier de la base de données a une commande Enregister sous… mais qui ne permet d’enregistrer que comme une autre base de données. Il n’y a pas de commande Enregister sous… pour les tables. Il n’y a pas non plus de commande Sélectionner tout, mais si on clique le coin supérieur gauche, on sélectionne tout et on peut copier dans une table de Calc. Cela semble un Copier-Coller interne à OOo. On ne peut pas copier dans un éditeur de texte. Au fait, on obtient le même résultat en sélectionnant le nom de la table sans l’ouvrir et en faisant Copier.

Se connecter en ligne à une base MySQL

On peut utiliser des connecteurs ODBC ou JDBC si le serveur hôte le supporte, mais il y a beaucoup mieux : un connecteur direct d’OpenOffice.org Base à MySQL, c’est l’extension openoffice.org-mysql-connector. Ce paquet est dans les dépôts Universe. C’est donc là qu’il faut le prendre, pas sur un site d’extensions d’OpenOffice.org.

Documenter la base

C’est la croix et la bannière. On ne peut pas sauver une fenêtre de modification de la table ni une fenêtre d’édition de requête SQL. Celle-ci étant du texte ordinaire, on peut la copier, mais pour la structure de la table, rien à faire, que je sache. Si la base sous-jacente n’est pas la base HSQL intégrée, mais une base MySQL en ligne, utiliser phpMyAdmin.

Retour en haut de la page