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 dun classeur vers un autre grâce à la
procédure suivante :
...
si certains styles sont corrects, dautres ont perdu leur définition en
route !
...
Jai cherché mais nai 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.