Créer un Style Impress par une macro

Bonjour,

Toujours dans mes macros.

Je cherche à créer un style de dessin sous Impress via une Macro

J'ai un bout de code dans le livre Programmation OpenOffice et LO

Et j'essaye simplement de le faire tourner

j'ai recopié le bout de code, j'ai seulement changé le nom du style et de son héritage

Dim monDocument As Object
Dim lesFamilles As Object, uneFamille As Object
Dim nouvStyle As Object
monDocument = ThisComponent
lesFamilles = monDocument.StyleFamilies
uneFamille = lesFamilles.getByName("graphics")
nouvStyle = monDocument.CreateInstance("com.sun.star.style.Style")
uneFamille.insertByName("Non Texte", nouvStyle)
nouvStyle.ParentStyle = "Text" ' hériter d'un style

J'ai un message d'erreur

Erreur d'exécution BASIC.

Une exception s'est produite :
Type: com.sun.star.lang.ServiceNotRegisteredException
Message: unknown service: com.sun.star.style.Style.

si quelqu'un peut me sortir de là

Merci

Pierre

Bonjour,

nouvStyle = monDocument.CreateInstance("com.sun.star.style.Style")

J'ai un message d'erreur

Erreur d'exécution BASIC.

Une exception s'est produite :
Type: com.sun.star.lang.ServiceNotRegisteredException
Message: unknown service: com.sun.star.style.Style.

si quelqu'un peut me sortir de là

Et avec

com.sun.star.style.CharacterStyle
ou
com.sun.star.style.ParagraphStyle ?

Salut,

Je ne vais pas t'aider beaucoup, je n'ai jamais utilisé que com.sun.star.style.CharacterStyle ou ParagraphStyle. Difficile de trouver des docs claires là dessus.

A priori, il me semble que les seuls services du module style utilisables sont listés ici : https://www.openoffice.org/api/docs/common/ref/com/sun/star/style/module-ix.html

Il me semble que poour toi ce serait plutôt un style de caractère, puisque c'est un fils de "non texte"

Cordialement,

Re-Bonsoir,

Salut,

Je ne vais pas t'aider beaucoup, je n'ai jamais utilisé que com.sun.star.style.CharacterStyle ou ParagraphStyle. Difficile de trouver des docs claires là dessus.

A priori, il me semble que les seuls services du module style utilisables sont listés ici : https://www.openoffice.org/api/docs/common/ref/com/sun/star/style/module-ix.html

Il me semble que pour toi ce serait plutôt un style de caractère, puisque c'est un fils de "non texte"

Rectification, cliqué trop vite, c'est un fils de *Text*.

J'ai fait une erreur avec le lien sur le SDK d'OpenOffice. Effectivement Libreoffice a bien ce service, mais je ne vois pas comment l'utiliser....

Jean-Michel COSTE

Bonjour

Je ne sais si ça peut aider, mais :

Pour transférer des styles d'un document à l'autre par macro, j'utilise
ça :
  optionsdoc4 = doc4.StyleFamilies.getStyleLoaderOptions
  setPropVal(optionsdoc4, "LoadTextStyles", True)
  setPropVal(optionsdoc4, "LoadFrameStyles", True)
  setPropVal(optionsdoc4, "LoadPageStyles", True) ' ceci est
inutile (défaut)
  setPropVal(optionsdoc4, "LoadNumberingStyles", True)
  setPropVal(optionsdoc4, "OverwriteStyles", True)
  doc4.StyleFamilies.loadStylesFromURL(doc.URL, optionsdoc4())

avec cette déclaration :

Dim optionsdoc as Variant, optionsdoc4 as Variant

doc est le document source.
doc4 est le document destination.

setPropVal est une sous-procédure qui affecte à chaque élément d'une
structure de données complexe une valeur:

Sub setPropVal(descr As Variant, nomProp As String, valProp As Variant)

  Dim p As Object

  for each p in descr
    if p.Name = nomProp then
       p.Value = valProp
       Exit Sub
     end if
  next
' la propriété nomProp n'existe pas !
  msgbox("Propriété "+nomProp+" inconnue.")
  'err = 423 ' déclencher erreur : Propriété ou méthode
introuvable
End Sub

Peut être se servir de tout ça ?

Cordialement,
O.J.

Bonjour,

Est-ce que ça transfert les styles d'un document Impress ?

Pierre

Bonjour,

Est-ce que ça transfert les styles d'un document Impress ?

Pierre

Je n'en sais rien, mais il suffit d'essayer pour voir.
Cordialement,
O.J.

Bonjour

Ci-dessous l'exemple pour créer un style de dessin "fils" de Standard>Objet
sans remplissage:

Sub PysCreateGraphicStyle

const STYLE_NAME = "pys"

Dim oDoc As Object
Dim oGraphics As Object
Dim oStyle As Object

oDoc = ThisComponent
oGraphics =oDoc. StyleFamilies.getByName("graphics")

if oGraphics.hasByName(STYLE_NAME) then
  msgbox "Le style " & STYLE_NAME & " est déjà créé", MB_ICONINFORMATION,
"Création de style"
else
  oStyle = oGraphics.createInstance("com.sun.star.style.Style")
  oStyle.parentStyle = "objectwithoutfill"
  oGraphics.insertByName("pys", oStyle)
end if

End Sub

Cordialement

Suite...

J'ai oublié d'utiliser la constante dans l'instruction de création.
Il faut donc remplacer par :

Sub PysCreateGraphicStyle

const STYLE_NAME = "pys"

Dim oDoc As Object
Dim oGraphics As Object
Dim oStyle As Object

oDoc = ThisComponent
oGraphics =oDoc. StyleFamilies.getByName("graphics")

if oGraphics.hasByName(STYLE_NAME) then
  msgbox "Le style " & STYLE_NAME & " est déjà créé", MB_ICONINFORMATION,
"Création de style"
else
  oStyle = oGraphics.createInstance("com.sun.star.style.Style")
  oStyle.parentStyle = "objectwithoutfill"
  oGraphics.insertByName( STYLE_NAME, oStyle)
end if

End Sub

Cordialement

Bonjour,

Donc, en fait dans le listing de Pierre, il fallait remplacer MonDocument.CreateInstance par uneFamille.CreateInstance

C'est différent des styles dans Writer...

Bonne fin de dimanche...

JM

Re-Bonjour,

Le problème ensuite est de trouver les noms originaux des styles, pour ceux qui sont traduits...

Pour ça, il y la le superbe script d'Andrew Pitonyak (DisplayAllStyles) dans son document : https://www.openoffice.org/fr/Documentation/Guides/Andrew5.pdf

Cordialement,

Bonjour,
Merci, c'est bien comme qu'il faut faire, je regarderai si j'ai mal lu le bouquin, en tout cas, ça fonctionne très bien, c'est une grosse économie de travail !

Merci encore

Pierre

Bonjour;

J'ai un fichier .odt (ex .sxw) qui s'ouvre parfaitement sur ma Mint, version LO 6.4.03; je le copie sur une clef, et l'ouvre - essaye de l'ouvrir! - sur une Manjaro, LO version 7.1.6: soit LO "patine" et tourne de l'œil, soit j'ai trois ou quatre pages (au lieu d'une demie...) de signes cabalistiques...

Une idée?

Merci par avance.

Une bonne continuation.

(Je ne maîtrise pas du tout Manjaro que je découvre (à l'insu de mon plein gré...), mais, a priori, le gestionnaire d'archive Ark ne reconnaît pas le .odt; arghh!! :-D)

Bonjour,

Typique d'un mauvais enregistrement sur la clé. Tu as fait plusieurs essais ? Copié sur le disque dur de la destination ?

Petit rappel : ne jamais travailler sur un support amovible....

Bonne soirée,

Moi aussi je commencerais à tester le fichier sur la clef. Je ne connais pas Manjaro, mais, je ne vois pas du tout pourquoi le problème viendrait de cette distribution. Les paquets aussi importants que LO doivent être bon sur toutes les distributions.

Bonjour
Un ex sxw, c'est très vieux quand même. Elle date de quand la conversion en odt ?

⁣Claire​

Bonjour, et merci à tou-te-s de vos réponses.

En effet, apparemment, c'est le transfert du fichier par une clef qui le corromp...

Sans doute une clef mal fichue?

Une bonne continuation

Cordialement