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