Bonsoir,
Je bidouille avec les objets avec des fois des résultats surprenant car
il ne trouve pas l'objet recherché bien que contenu dans le document
j'ai des cas ou je fais plusieurs itérations pour être sur de trouver
l'objet, mais mes documents traité son lourd.
deux bouts de code et on peut voir mes errances
ma bible programmation OpenOffice de Marcelly et Godard
et bien sûr la fonction Xray pour décortiquer se que l'on manipule
cordialement
Jean-Luc
REM ***** BASIC *****
rem **** copie locale ****
rem CodeAnnexeB-02.sxw bibli : Images Module1
Option Explicit
Sub resizeImageByWidth(uneImage As Object, largeur As Long)
Dim leBitMap As Object, Proportion As Double
Dim Taille1 As New com.sun.star.awt.Size
LeBitmap = uneImage.GraphicObjectFillBitmap
Taille1 = LeBitMap.Size ' taille en pixels !
Proportion = Taille1.Height / Taille1.Width
Taille1.Width = largeur ' largeur en 1/100 de mm
Taille1.Height = Taille1.Width * Proportion
uneImage.Size = Taille1
End Sub
Function FindObjectByName(unePage As Object,nomObj As String, Optional
service As String, Optional LieuDAppelFOBN As String) As Object ' 2
----------- 2
' com.sun.star.table.XTableCharts com.sun.star.drawing.OLE2Shape
Dim objX, SousObjectFOBN, unePageFOBN, oObjetBrouillonFOBN,
oObjetTrouverFOBN As Object
Dim NomProvisoireFOBN, NomObjetFOB, ListeDesObjectsFOBN As String
Dim jFOBN, iFOBN, CompteurFOBN, CompteurDepartFOBN, CompteurFinalFOBN,
x, y As Long
unePageFOBN = unePage
' NomProvisoireFOBN = unePageFOBN.Name
ListeDesObjectsFOBN="Nbre object dans page initiale " &
unePageFOBN.Count & " | Object à trouver " & nomObj & " | "
y=0
If nomObj="" Then
Print ("erreur le nom de l'object est vide " & nomObj)
End If
CompteurDepartFOBN = unePageFOBN.Count
CompteurFinalFOBN = -1
jFOBN=0
Do While IsEmpty (oObjetTrouverFOBN) Or IsNull(oObjetTrouverFOBN) '
CompteurDepartFOBN <> CompteurFinalFOBN
If jFOBN > 1 Then
Print("Information : FindObjectByName ligne 81 PB sur la recherche
d'objet nombre itération " & jFOBN & " pour l'objet " & nomObj &" " &
LieuDAppelFOBN)
End If
For x = 0 To unePageFOBN.Count - 1
objX = unePageFOBN(x)
' Object |
supportsService | Count
' com.sun.star.comp.sc.ScShapeObj" |
com.sun.star.drawing.OLE2Shape | non
' SwXTextGraphicObject |
com.sun.star.text.TextGraphicObject | non
' SwXTextTable |
com.sun.star.text.TextTable | non
' com.sun.star.drawing.XDrawPage |
com.sun.star.drawing.GenericDrawPage | oui
' 'com.sun.star.drawing.RotationDescriptor
'com.sun.star.drawing.ShadowProperties 'com.sun.star.drawing.Shape
'com.sun.star.drawing.Text
'com.sun.star.drawing.TextProperties , 'com.sun.star.sheet.Shape
com.sun.star.drawing.XDrawPage
If objX.supportsService("com.sun.star.text.TextTable") or
objX.supportsService("com.sun.star.text.TextGraphicObject") or
objX.supportsService( "com.sun.star.drawing.OLE2Shape")_
Then ' or
objX.supportsService("com.sun.star.text.TextGraphicObject") Then ' or True
CompteurFOBN = 0 ' com.sun.star.comp.sc.ScShapeObj
SousObjectFOBN = objX
ElseIf objX.supportsService("com.sun.star.drawing.GenericDrawPage")
Then
CompteurFOBN = objX.Count - 1
ListeDesObjectsFOBN= ListeDesObjectsFOBN & " | Nbre d'object dans
page | " & objX.Count
SousObjectFOBN = objX(0)
Print ("objet multiple " & CompteurFOBN)
Xray SousObjectFOBN
Else
CompteurFOBN = 0
Print ("noter le service et vérifier si il y a Count")
Xray objX
End If
For iFOBN = 0 To CompteurFOBN
y=y+1
NomObjetFOB = SousObjectFOBN.Name
ListeDesObjectsFOBN= ListeDesObjectsFOBN &" | " & x & " | " &
NomObjetFOB
If SousObjectFOBN.Name = nomObj Then
If IsMissing(service) then
oObjetTrouverFOBN = SousObjectFOBN ' objet trouvé
Print (" Name ? et copier un service")
Xray SousObjectFOBN 'com.sun.star.sheet.SpreadsheetDrawPage
Print("Stop")
ListeDesObjectsFOBN= ListeDesObjectsFOBN & " | Objet Trouvé a |
" & SousObjectFOBN.Name
'jFOBN = 1
CompteurFinalFOBN = unePageFOBN.Count
CompteurDepartFOBN = CompteurFinalFOBN
x = unePageFOBN.Count - 1
Else
If SousObjectFOBN.supportsService(service) then
oObjetTrouverFOBN = SousObjectFOBN ' objet trouvé
ListeDesObjectsFOBN= ListeDesObjectsFOBN & " | Objet Trouvé b
| " & SousObjectFOBN.Name
'jFOBN=1
CompteurFinalFOBN = unePageFOBN.Count
CompteurDepartFOBN = CompteurFinalFOBN
x = unePageFOBN.Count - 1
End If
End If
End If
SousObjectFOBN = objX(iFOBN)
If iFOBN <> 0 or IsEmpty (SousObjectFOBN) Or
IsNull(SousObjectFOBN) Then
Print ("objet multiple suite " & CompteurFOBN)
Xray SousObjectFOBN
Xray objX
End If
Next iFOBN
Next x
jFOBN = jFOBN+1
If nomObj="erreur" Then
Print("regarder les Count")
'Xray unePageFOBN
CompteurFinalFOBN = unePageFOBN.Count
print("Les compteurs intermédiaire " & CompteurDepartFOBN & " page
" & unePageFOBN.Count & " final " & CompteurFinalFOBN)
Xray unePageFOBN
Else
oObjetBrouillonFOBN = unePageFOBN
CompteurFinalFOBN = unePageFOBN.Count
End If
If CompteurDepartFOBN <> CompteurFinalFOBN Or unePageFOBN.Count <>
CompteurFinalFOBN Or (( IsEmpty (oObjetTrouverFOBN) Or
IsNull(oObjetTrouverFOBN)) And jFOBN<3) Then
'print("Les compteurs final " & CompteurDepartFOBN & " page " &
unePageFOBN.Count & " final " & CompteurFinalFOBN)
'Print("Liste des objects " & ListeDesObjectsFOBN)
CompteurFinalFOBN = unePageFOBN.Count
End If
Loop
If IsEmpty (oObjetTrouverFOBN) Or IsNull(oObjetTrouverFOBN) Then '
nomObj="EP214" Or nomObj="CO048"
Print("Object n'est pas trouvé, Liste des objects " &
ListeDesObjectsFOBN)
print("Les compteurs " & CompteurDepartFOBN & " " &
unePageFOBN.Count & CompteurFinalFOBN)
'Xray SousObjectFOBN
Xray objX
Xray unePageFOBN
Else
FindObjectByName = oObjetTrouverFOBN
End If
End Function ' renvoie Null en cas d'échec FindObjectByName 2
----------------------------------------------------- 2
Le 16/06/2021 à 18:10, Billard François-Marie a écrit :
Bonjour
Quel document de référence puis-je lire (site, livre ou autre), qui me
permettrait de bien comprendre comment je peux atteindre un objet dans
un document texte avec une macro.
Je cherche à mettre en œuvre une macro qui modifierai une image en
fonction du contenu d'un champs les deux étant situés dans l'entête de
page.
A ce stade je butte sur la syntaxe qui me permet de lire ce champs
dans l'arborescence du document.
Merci par avance.
M. BILLARD
--
Envoyez un mail à users+unsubscribe@fr.libreoffice.org pour vous désinscrire
Les archives de la liste sont disponibles à https://listarchives.libreoffice.org/fr/users/
Privacy Policy: https://www.documentfoundation.org/privacy
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.