Bonsoir Pierre-Yves,
> -----Message d'origine-----
> De : pierre-yves samyn [mailto:[email protected]]
> Envoyé : dimanche 5 juillet 2015 12:54
> À : [email protected]
> 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 à [email protected] 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