Différences de programmation entre AOO et LibO

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

Différences de programmation entre AOO et LibO

Messagepar bm92 » 07 Déc 2013 15:22

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
Dernière édition par bm92 le 17 Jan 2016 11:10, édité 10 fois.
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

[OXT] Extensions comportant une barre d'outils

Messagepar bm92 » 07 Déc 2013 15:25

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.
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

[Calc] Configuration LibreOffice et propriété FormulaLocal

Messagepar bm92 » 07 Déc 2013 15:28

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.
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

[Calc] Zones nommées restreintes à la feuille

Messagepar bm92 » 07 Déc 2013 15:32

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.
Dernière édition par bm92 le 21 Août 2015 09:43, édité 1 fois.
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

[Python] Différences du Python embarqué

Messagepar bm92 » 07 Déc 2013 15:35

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...
Dernière édition par bm92 le 17 Jan 2016 10:58, édité 2 fois.
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

[API] Envoi de courriel

Messagepar bm92 » 07 Déc 2013 15:37

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
Dernière édition par bm92 le 21 Août 2015 09:45, édité 1 fois.
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

[API] Configuration

Messagepar bm92 » 07 Déc 2013 15:41

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.
Dernière édition par bm92 le 21 Août 2015 09:29, édité 1 fois.
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

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

Messagepar bm92 » 12 Déc 2013 12:28

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.
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

Différences en ligne de commande

Messagepar bm92 » 11 Août 2014 14:32

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.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

Fonction pour Calc modifiant une autre cellule

Messagepar bm92 » 23 Jan 2015 08:29

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.
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

Documentation IDL du SDK

Messagepar bm92 » 23 Jan 2015 12:19

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
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

Contrôle Compteur (SpinButton)

Messagepar bm92 » 27 Mars 2015 08:37

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.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

DocumentInfo est obsolète

Messagepar bm92 » 15 Juin 2015 12:58

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
...
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 6 invité(s)