Date: prev next · Thread: first prev next last
2015 Archives by date, by thread · List index


Bonsoir Pierre-Yves,

-----Message d'origine-----
De : pierre-yves samyn [mailto:pierre-yves.samyn@laposte.net]
Envoyé : dimanche 5 juillet 2015 12:54
À : users@fr.libreoffice.org
Objet : [fr-users] Re: Calc - styles chargés par macro erronés

Bonjour Michel


Michel Rudelle wrote
Je copie  des styles de cellule d’un classeur vers un autre grâce à la
procédure suivante :
...
si certains styles sont corrects, d’autres ont perdu leur définition en
route !
...
J’ai cherché mais n’ai pas trouvé de bug correspondant.

Ben... c'est parce que ce n'est pas un bug me semble-t-il.

Tu récupères les styles mais les styles utilisent des formats qui en
l'occurrence sont personnalisés, donc, propres au classeur source.
La solution est de récupérer aussi ces formats.

Ci-dessous un code à tester (il y a peut-être plus performant mais
là tout de suite j'ai fait avec ce que je savais sans rechercher plus
avant
dans l'Api).

Explications :

J'utilise loadStylesFromDocument puisque tu récupères les styles de
thiscomponent. Pas besoin de passer par un chargement "url".

Quand les styles sont chargés...
Pour chaque style de cellule de la source (thiscomponent)...
À partir de la clé on récupère son format...
Si c'est un format "utilisateur"...
On recherche ce format dans la cible (formats de syntheseSF)...
Si on ne trouve pas ce format on l'ajoute ce qui donne une nouvelle clé...
Que l'on attribue au style de même nom dans la cible (syntheseSF)

PS: je fais l'hypothèse que la locale était la même entre les classeurs...

J'espère que c'est (relativement) clair... :)


Euréka, ça marche du tonnerre !

J'ai ramé un peu, j'ai suivi l'idée et je me suis aidé de la bible et de
Xray.
Mais il reste un mystère: Pourquoi la clé du même format de nombre est-elle
différente dans les deux documents ???

Encore merci,
Michel

PS: Voici le petit bout de Procédure que j'ai fait pour ça:

Sub copieFormatNombre(docOrigine As Object, docCible As Object, nomDuStyle
As String)

'       docOrigine et docCible sont deux documents ouverts
'       nomDuStyle est le nom du style dans les deux documents

'retour avec le style mis correctement à jour dans le document cible

Dim maLangue As New com.sun.star.lang.Locale
Dim cleDoc1 As Long, cleDoc2 As Long, x As Long
Dim unFormat As Object, nomDuFormat As String

'1/ dans le document d'origine, recherche du format de nombre personnalisé
utilisé dans le style copié

'récupérer le NumberFormat correspondant (la clé)
cleDoc1 =
docOrigine.StyleFamilies.getByName("CellStyles").getByName(nomDuStyle).Numbe
rFormat
'récupérer l'objet format correspondant à ce NumberFormat pour en obtenir le
nom (en fait ce que l'on voit dans "Description du Format")
unFormat = docOrigine.NumberFormats.getByKey(cleDoc1)
nomDuFormat = unFormat.FormatString

'2/ recherche de l'existence de ce format dans le document cible et ajout
dans le style s'il n'existe pas

maLangue.Language = "fr"
maLangue.Country = "FR"
x = docCible.NumberFormats.queryKey(nomDuFormat, maLangue, False)
'renvoie le NumberFormat si le format est présent, sinon négatif
If x < 0 Then
        cleDoc2 = docCible.NumberFormats.addNew(nomDuFormat, maLangue)
        
docCible.StyleFamilies.getByName("CellStyles").getByName(nomDuStyle).NumberF
ormat = cleDoc2
End If

End Sub


-- 
Envoyez un mail à users+unsubscribe@fr.libreoffice.org pour savoir comment vous désinscrire
Les archives de la liste sont disponibles à http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne pourront pas être 
supprimés

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.