Suite bureautique OpenOffice.org
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.
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
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 ».
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>
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).
Enregistrer sous…
HTML, il y a une autre voie en Calc,
c’est Exporter…
en XHTML. Là aussi les accents sont corrects, mais
tout le corps du fichier xml est sur une seule ligne.On peut le
sauver en introduisant des fin de lignes devant les principales balises et
en éliminant les styles ou autres attibuts indésirés avec un éditeur de bas
niveau comme sed
avant de l’ouvrir dans un éditeur de code pour
terminer le nettoyage et filtrer encore avec Tidy HTML.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.
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
.
Rien à raconter.
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.
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.
Tables
sous Base de données
.É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.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.
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.
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.
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
.
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.
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.