Page 1 sur 1

Différences de programmation entre AOO et LibO

MessagePublié: 07 Déc 2013 16:22
par bm92
Bonjour,

Ce sujet signale les différences de programmation (Basic, API, etc.) entre AOO et LibO, à fonctionnalité identique.
En d'autres termes, ce sujet peut vous aider si vous écrivez des macros ou extensions utilisables indifféremment avec LibreOffice ou Apache OpenOffice.
On ne traitera donc pas ici de l'impact API des fonctionnalités propres à une seule des deux suites.

Ce fil est verrouillé afin de conserver une lisibilité optimale.

Table des matières

[OXT] Extensions comportant une barre d'outils

MessagePublié: 07 Déc 2013 16:25
par bm92
Apache OpenOffice 4.0 utilise une nouvelle manière de déclarer une barre d'outils dans un fichier d'extension.
Il en résulte que les extensions Apache OpenOffice 4.0 comportant une barre d'outils doivent être construites différemment de celles des versions précédentes ou de LibreOffice (le fichier extension est incompatible).
Une extension contruite avec l'ancienne méthode peut s'installer sur Apache OpenOffice 4.0 mais la barre d'outils n'est pas affichée.
Une extension sans barre d'outils n'est pas impactée par cette évolution.

Les outils BasicAddonBuilder et Extension Compiler ont été mis à jour pour produire les deux versions d'extensions.

[Calc] Configuration LibreOffice et propriété FormulaLocal

MessagePublié: 07 Déc 2013 16:28
par bm92
LibreOffice 3.5 permet de configurer via le menu Outils > Options > LibreOffice Calc > Formule :
  • la méthode d'adressage de cellule
  • l'utilisation du nom anglais des fonctions
  • le caractère séparateur d'arguments, de colonne et de ligne de matrice
Ceci a des conséquences sur le contenu de la propriété FormulaLocal d'une cellule. Explications dans le message N'utilisez plus FormulaLocal.

[Calc] Zones nommées restreintes à la feuille

MessagePublié: 07 Déc 2013 16:32
par bm92
Les zones nommées restreintes à la feuille sont supportées par les deux suites, mais avec des API différentes.

LibreOffice 3.4 :
Au niveau de la feuille, une propriété NamedRanges permet d'accèder aux zones nommées restreintes à celle-ci.

Apache OpenOffice 4.0 :
Au niveau du document, propriété NamedRange, ajout de l' interface com.sun.star.sheet.XNamedRanges2; et pour une zone nommée, ajout de l'interface XNamedRange2, et de la structure com.sun.star.sheet.RangeScopeName.

[Python] Différences du Python embarqué

MessagePublié: 07 Déc 2013 16:35
par bm92
Apache OpenOffice 4.1.1 embarque la version 2.7.6 de Python.
LibreOffice 4.4.5 embarque la version 3.3.3 de Python.
Le codage est éventuellement à adapter, voir Porting to Python 3.
Un script utilisant les particularités de la version 3 de Python est incompatible avec ApacheOpenOffice
Un script utilisant des fonctionnalités de la version 2.7 de Python non supportées par la version 3 est incompatible avec LibreOffice.

LibreOffice 5.1 fournit un PyUNO plus pythonique.
PyUNO est la liaison entre le langage Python et l'API LibreOffice.
Les objets UNO comportant une interface de conteneur peuvent être manipulés en employant les mécanismes Python de liste, itérateur, dictionnaire. Ceci est détaillé dans le commit et plus clairement dans cette présentation.
En utilisant ces mécanismes le codage Python est plus élégant, mais il s'éloigne de la réalité de l'API : le néophyte aura plus de mal à faire l'équivalence entre un tel codage Python et les méthodes correspondantes de l'API...

[API] Envoi de courriel

MessagePublié: 07 Déc 2013 16:37
par bm92
Apache OpenOffice 4.0 a amélioré l'envoi de courriel de manière incompatible avec les versions précédentes et avec LibreOffice.
  • Suppression des services com.sun.star.system.SimpleCommandMail et SimpleSystemMail
  • Ajout du service com.sun.star.system.SystemMailProvider.
Mise en oeuvre : voir suprême de code viewtopic.php?f=15&t=39844

[API] Configuration

MessagePublié: 07 Déc 2013 16:41
par bm92
LibreOffice version 4.0 et suivantes a changé l'API concernant certaines données de configuration. Pour certains services, les propriétés du service ont été transférées sur des interfaces, sous forme d'attribut :
  • Les propriétés du service com.sun.star.sheet.GlobalSheetSettings sont remplacées par des attributs d'une nouvelle interface com.sun.star.sheet.XGlobalSheetSettings
  • Les propriétés du service com.sun.star.util.PathSettings sont remplacées par des attributs d'une nouvelle interface com.sun.star.util.XPathSettings
  • Les propriétés du service com.sun.star.linguistic2.LinguProperties sont remplacées par des attributs d'une nouvelle interface com.sun.star.linguistic2.XLinguProperties
La réalisation est faite de telle sorte que l'accès par getPropertyValue() reste possible, ce qui permet une compatibilité pour Java ou C++.
L'accès depuis Basic ou Python est lui aussi compatible sans modification.

[API] Contrôles champ de Date et champ Horaire

MessagePublié: 12 Déc 2013 13:28
par bm92
LibreOffice 4.1.1 introduit une incompatibilité avec Apache OpenOffice et toutes les versions précédentes de LibreOffice.
Signalé dans LibreOffice 4.1 ReleaseNotes.

Contrôle DateField
Les pseudo-propriétés Date, Min, Max, First, Last, deviennent une structure com.sun.star.util.Date au lieu d'un Long. De même dans le modèle du contrôle, pour les propriétés Date, DateMin, DateMax.
Contrôle TimeField
Les pseudo-propriétés Time, Min, Max, First, Last, deviennent une structure com.sun.star.util.Time au lieu d'un Long. De même dans le modèle du contrôle, pour les propriétés Time, TimeMin, TimeMax.

Rappel : Pseudo-propriétés
Les objets API comportent souvent une méthode pour écrire une donnée interne, exemple setDate(valeur), et une fonction sans argument pour lire cette donnée, exemple getDate(). Certains langages (Basic, Python, COM, etc) permettent alors de manipuler la donnée comme si elle était une propriété de l'objet, exemple Date.

Un codage compatible toutes versions devra déterminer le type de la propriété et réaliser deux traitements différents.

Exemple Basic sur un contrôle champ de Date, obtenir l'année:
Code : Tout sélectionner   AgrandirRéduire
Dim quelleDate As Variant ' Attention !
Dim annee As Long
Dim k As Object
' k étant un contrôle de date ou son modèle
quelleDate = k.Date

if IsNumeric(quelleDate)  then
  annee = quelleDate \ 10000
else
  annee = quelleDate.Year ' LibreOffice >= 4.1.1
end if

Exemple Basic sur un contrôle champ Horaire, obtenir la valeur des minutes:
Code : Tout sélectionner   AgrandirRéduire
Dim quelleHeure As Variant ' Attention !
Dim mn As Long
Dim k As Object
' k étant un contrôle d'heure ou son modèle
quelleHeure = k.Time

if IsNumeric(quelleHeure)  then
  mn = (quelleHeure \ 10000) mod 100
else
  mn = quelleHeure.Minutes ' LibreOffice >= 4.1.1
end if


LibreOffice a rajouté des fonctions Basic de conversion entre une donnée de type Basic Date et une donnée de type structure UNO. Elles sont décrites dans l'aide F1.

Code : Tout sélectionner   AgrandirRéduire
CDateFromUnoDate()
CDateFromUnoTime()
CDateFromUnoDateTime()
CDateToUnoDate()
CDateToUnoTime()
CDateToUnoDateTime()

Attention : ces fonctions de Basic n'existent que dans LibreOffice 4.1.2 ou plus récent, elles n'existent pas dans Apache OpenOffice.

Différences en ligne de commande

MessagePublié: 11 Août 2014 15:32
par bm92
Lorsqu'on lance OpenOffice en ligne de commande, ou depuis un fichier batch, on peut ajouter des arguments pour préciser le fonctionnement.
Les arguments acceptés sont listés dans l'aide F1; onglet Index, rechercher Arguments dans la ligne de commande.

Les arguments acceptés les plus courants sont identiques entre Apache OpenOffice et LibreOffice.
Mais certains arguments n'existent que sur une seule suite, par exemple :

--convert-to et --print-to-file ne sont reconnus que par LibreOffice.

Fonction pour Calc modifiant une autre cellule

MessagePublié: 23 Jan 2015 09:29
par bm92
Dans le fil
[Calc]Fonction pour écrire dans une cellule distante

on peut voir cette exemple de fonction, à utiliser dans une formule de cellule :

Code : Tout sélectionner   AgrandirRéduire
Function ECRIRDANS(arg1 As string, arg2 As variant) As string
    If IsNumeric(arg2)  then
       ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(arg1).Value = arg2   
    Else
       ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(arg1).String = arg2
    End If
End Function

Elle permet de modifier le contenu d'une cellule quelconque de la feuille.

Cette fonction est efficace seulement sur LibreOffice.
Sur Apache OpenOffice( et sur OpenOffice.org) la fonction ne modifie pas la cellule distante, sans déclencher d'erreur.
Ceci est une volonté des développeurs pour éviter des anomalies d'affichage, voir le rapport 31627.

Documentation IDL du SDK

MessagePublié: 23 Jan 2015 13:19
par bm92
La documentation IDL, fournie par le SDK, décrit les différents services, interfaces, propriétés, etc, de l'API.

Depuis la version 4.2 de LibreOffice cette documentation a une présentation très différente de celle employée par Apache OpenOffice et OpenOffice.org. Les fichiers html de documentation sont générés par un outil général de développeur, doxygen, au lieu de autodoc, qui est adapté aux concepts de l'API OpenOffice.
La documentation IDL de LibreOffice répartit les éléments en Namespaces et Classes, notions utiles pour étudier la structure du logiciel, mais sans intérêt pour un utilisateur de l'API.

Pour trouver la documentation d'un élément inconnu on utilise les indexes.
Apache OpenOffice regroupe tous les éléments de l'API dans un seul index alphabétique, une page par lettre initiale, exemple page des A; chaque ligne de l'index indique l'adresse hiérarchique et le type de l'entité correspondante, ce qui permet de distinguer les entités ayant le même nom.

LibreOffice présente plusieurs indexes alphabétiques; certains tiennent sur une seule page, d'autres ont une page par lettre initiale.
En cas d'homonymie l'index donne une liste de liens, parfois sans préciser leur hiérarchie dans l'API. Il faut lire la page de chaque lien pour comprendre à quoi chacun correspond.
Chaque index liste les entités d'un ou plusieurs types. Les noms de ces types peuvent différer des concepts API et prêter à confusion.
  • Namespace Members
  • Class Members
    • Functions = API function
    • Variables = API attribute, property, field in struct, field in exception, sequence
    • All = regroupement des entités ci-dessus
  • Class Index
    Sur une seule page Web, cet index liste les entités des autres types de l'API : service, interface, structure...
    Le nom du lien indique sa hiérarchie dans l'API.

Les pages descriptives diffèrent elles aussi de la documentation Apache OpenOffice. L'adresse de ces pages ne reflète pas la hiérarchie API. La hiérarchie est indiquée en haut de page, dans la troisième ligne bleutée.
Les termes employés dans les titres de section prêtent à confusion: Member, Attributes.
  • Dans une page de service l'accent est mis sur l'héritage des services et des interfaces. Sous Public Attributes on trouve essentiellement des propriétés. Exemple service com.sun.star.text.textfield.docinfo.Revision : LibreOffice / Apache OpenOffice
  • Dans une page d'interface, dans la section Public Attributes on trouve les attributs de l'interface. Exemple interface com.sun.star.presentation.XSlideShowController : LibreOffice / Apache OpenOffice

Contrôle Compteur (SpinButton)

MessagePublié: 27 Mars 2015 09:37
par bm92
Formulaires
Le contrôle Compteur (SpinButton en anglais) existe pour les formulaires, sur Apache OpenOffice et LibreOffice. Il se trouve sur la palette de contrôles supplémentaires.

Dialogues Apache OpenOffice
Dans un dialogue, ce contrôle n'existe pas sur la palette de contrôles de l'EDI. Cependant il est possible de l'ajouter dynamiquement sur un dialogue, par programmation; mais c'est plus compliqué. Ce suprême de code en montre un exemple.

Dialogues LibreOffice
Depuis sa version 3.5, LibreOffice a introduit le contrôle Compteur sur la palette de contrôles de dialogue de l'EDI.
Mais le document contenant un dialogue créé avec ce contrôle est incompatible avec Apache OpenOffice. En effet Apache OpenOffice ne sait pas interpréter le fichier xml du dialogue.
SpinButton_inconnu.png
Document contenant un contrôle Compteur dans un module de dialogue

Par contre, si le contrôle est ajouté par programme sur le dialogue, la compatibilité Apache OpenOffice - LibreOffice subsiste.

DocumentInfo est obsolète

MessagePublié: 15 Juin 2015 13:58
par bm92
Le service DocumentInfo qui est marquée obsolète depuis OpenOffice.org 3.0, n'existe plus sur LibreOffice 4.0 et plus récents.
D'anciennes macros utilisent les propriétés de ce service, obtenu via la pseudo-propriété DocumentInfo ou via la méthode getDocumentInfo().
Code : Tout sélectionner   AgrandirRéduire
Dim infos As Object

infos = ThisComponent.DocumentInfo  ' obsolète !
MsgBox(infos.Author")

Ce service existe encore sur Apache OpenOffice 4.1.1, mais pourrait être supprimé dans l'avenir.

Pour LibreOffice comme pour Apache OpenOffice, utiliser à la place l'interface XDocumentProperties dont on utilisera les attributs d'interface ou l'objet renvoyé par la méthode getUserDefinedProperties().
Code : Tout sélectionner   AgrandirRéduire
Dim infos As Object, udp As Object

infos = ThisComponent.DocumentProperties
MsgBox(infos.Author")
udp = infos.UserDefinedProperties
...