Bonsoir Pierre-Yves,

> -----Message d'origine-----
> De : pierre-yves samyn [mailto:pierre-yves.sa...@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+unsubscr...@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

Répondre à