von MikeRo » Do, 21.07.2011 11:57
Ich habe den Beitrag gefunden, nur bekomme ich eine Fehlermeldung bei
"Objektvariable nicht belegt"
Hier mein Code.
Das Problem ist aber, das ich die Pfade der Bilder aus der Datenbank auslese und die Bilder an eine bestimmte Position in dem Dokument müssen. Und die Position ist auch jedes mal anders, da die Tabelle über den Bildern immer eine variable Breite (Anzahl von Spalten) hat. Prinzipiell müssen bis zu 3 Bilder nebeneinander unter der Tabelle eingefügt werden. Mit meinem Makro klappt das auch wunderbar, aber eben nur als Verknüpfung. Was ich auch nicht wirklich hin bekommen habe ist eine Bild Überschrift genau über dem Bild und eine Bild Unterschrift genau unter dem Bild.
Code: Alles auswählen
Sub GrafikEinfuegen
nWidth = 5450 'Breite
nHeight = 2000 'Höhe
sLabel = "Abbildung " 'Beschriftung unter dem Bild
If OS = 1 Then 'Windows
sImgPath = "file:///Z:/Programme/Vorlagen für Makros/Angebote/Bilder/SW.jpg"
ElseIf OS = 4 Then 'Unix
sImgPath = "file:///media/transfer/Programme/Vorlagen für Makros/Angebote/Bilder/SW.jpg"
End IF
oBitmaps = oDoc.createInstance( "com.sun.star.drawing.BitmapTable" )
sInternalPicName = "myPic"
For i = 0 To 200
sInternalPicName = "myPic" & i
If NOT oBitmaps.hasByName(sInternalPicName) Then Exit For
Next i
oBitmaps.insertByName(sInternalPicName, sImgPath )
If NOT oBitmaps.hasByName(sInternalPicName) Then
MsgBox("Ausgewählte Datei konnte nicht als Grafik eingefügt werden",48,"Fehler")
Exit Sub
End If
oDoc.lockControllers
oPic = oBitmaps.getByName(sInternalPicName)
oTextFrame = oDoc.createInstance("com.sun.star.text.TextFrame")
oBorder = oTextFrame.BottomBorder
With oBorder
.Color = 0
.InnerLineWidth = 0
.OuterLineWidth = 0
.LineDistance = 0
End With
With oTextFrame
.Width = nWidth
.Height = nHeight
.BottomBorder = oBorder
.TopBorder = oBorder
.RightBorder = oBorder
.LeftBorder = oBorder
.LeftMargin = 0
.RightMargin = 0
.TopMargin = 0
.BottomMargin = 0
.TextWrap = 0
.SizeType = 0
.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
End With
oCursor = oDoc.CurrentController.getViewCursor
On Local Error GoTo ErrorOccured
If NOT isEmpty(oCursor.TextTable) Then
oCursor.Cell.insertTextContent(oCursor,oTextFrame,False)
ElseIf NOT isEmpty(oCursor.TextFrame) Then
oCursor.TextFrame.insertTextContent(oCursor,oTextFrame,False)
Else
oDoc.Text.insertTextContent(oCursor,oTextFrame,False)
End If
oCursor = oTextFrame.createTextCursor
oGraph = oDoc.createInstance("com.sun.star.text.GraphicObject")
With oGraph
.GraphicURL = oPic
.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
.Width = nWidth
.Height = nHeight
End With
oTextFrame.insertTextContent(oCursor,oGraph,False)
oTextFrame.String = sLabel
oTFMaster = oDoc.TextFieldMasters.getByName("com.sun.star.text.fieldmaster.SetExpression.Illustration")
oField = oDoc.createInstance("com.sun.star.text.textfield.SetExpression")
oField.attachTextFieldMaster(oTFMaster)
oCursor.goToEnd(False)
oTextFrame.insertTextContent(oCursor,oField,False)
oCursor.goToStart(True)
oCursor.CharPosture = 2
oDoc.TextFields.refresh
Do While oDoc.hasControllersLocked
oDoc.unlockControllers
Loop
Exit Sub
ErrorOccured:
MsgBox ("Cursor an ungeeigneter Position (z.B. Grafik)",48,"Fehler")
If oBitmaps.hasByName(sInternalPicName) Then
oBitmaps.removeByName(sInternalPicName)
End If
Do While oDoc.hasControllersLocked
oDoc.unlockControllers
Loop
End Sub
[quote="DPunch"]Aloha
Der komplette Code dafür ist [url=http://de.openoffice.info/memberlist.php?mode=viewprofile&u=28385]Hier -> "Über ein Makro ein bildeinfügen und Größe ändern"[/url] zu finden.[/quote]
Ich habe den Beitrag gefunden, nur bekomme ich eine Fehlermeldung bei [code] oBorder = oTextFrame.BottomBorder[/code] "Objektvariable nicht belegt"
Hier mein Code.
Das Problem ist aber, das ich die Pfade der Bilder aus der Datenbank auslese und die Bilder an eine bestimmte Position in dem Dokument müssen. Und die Position ist auch jedes mal anders, da die Tabelle über den Bildern immer eine variable Breite (Anzahl von Spalten) hat. Prinzipiell müssen bis zu 3 Bilder nebeneinander unter der Tabelle eingefügt werden. Mit meinem Makro klappt das auch wunderbar, aber eben nur als Verknüpfung. Was ich auch nicht wirklich hin bekommen habe ist eine Bild Überschrift genau über dem Bild und eine Bild Unterschrift genau unter dem Bild.
[code]
Sub GrafikEinfuegen
nWidth = 5450 'Breite
nHeight = 2000 'Höhe
sLabel = "Abbildung " 'Beschriftung unter dem Bild
If OS = 1 Then 'Windows
sImgPath = "file:///Z:/Programme/Vorlagen für Makros/Angebote/Bilder/SW.jpg"
ElseIf OS = 4 Then 'Unix
sImgPath = "file:///media/transfer/Programme/Vorlagen für Makros/Angebote/Bilder/SW.jpg"
End IF
oBitmaps = oDoc.createInstance( "com.sun.star.drawing.BitmapTable" )
sInternalPicName = "myPic"
For i = 0 To 200
sInternalPicName = "myPic" & i
If NOT oBitmaps.hasByName(sInternalPicName) Then Exit For
Next i
oBitmaps.insertByName(sInternalPicName, sImgPath )
If NOT oBitmaps.hasByName(sInternalPicName) Then
MsgBox("Ausgewählte Datei konnte nicht als Grafik eingefügt werden",48,"Fehler")
Exit Sub
End If
oDoc.lockControllers
oPic = oBitmaps.getByName(sInternalPicName)
oTextFrame = oDoc.createInstance("com.sun.star.text.TextFrame")
oBorder = oTextFrame.BottomBorder
With oBorder
.Color = 0
.InnerLineWidth = 0
.OuterLineWidth = 0
.LineDistance = 0
End With
With oTextFrame
.Width = nWidth
.Height = nHeight
.BottomBorder = oBorder
.TopBorder = oBorder
.RightBorder = oBorder
.LeftBorder = oBorder
.LeftMargin = 0
.RightMargin = 0
.TopMargin = 0
.BottomMargin = 0
.TextWrap = 0
.SizeType = 0
.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
End With
oCursor = oDoc.CurrentController.getViewCursor
On Local Error GoTo ErrorOccured
If NOT isEmpty(oCursor.TextTable) Then
oCursor.Cell.insertTextContent(oCursor,oTextFrame,False)
ElseIf NOT isEmpty(oCursor.TextFrame) Then
oCursor.TextFrame.insertTextContent(oCursor,oTextFrame,False)
Else
oDoc.Text.insertTextContent(oCursor,oTextFrame,False)
End If
oCursor = oTextFrame.createTextCursor
oGraph = oDoc.createInstance("com.sun.star.text.GraphicObject")
With oGraph
.GraphicURL = oPic
.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
.Width = nWidth
.Height = nHeight
End With
oTextFrame.insertTextContent(oCursor,oGraph,False)
oTextFrame.String = sLabel
oTFMaster = oDoc.TextFieldMasters.getByName("com.sun.star.text.fieldmaster.SetExpression.Illustration")
oField = oDoc.createInstance("com.sun.star.text.textfield.SetExpression")
oField.attachTextFieldMaster(oTFMaster)
oCursor.goToEnd(False)
oTextFrame.insertTextContent(oCursor,oField,False)
oCursor.goToStart(True)
oCursor.CharPosture = 2
oDoc.TextFields.refresh
Do While oDoc.hasControllersLocked
oDoc.unlockControllers
Loop
Exit Sub
ErrorOccured:
MsgBox ("Cursor an ungeeigneter Position (z.B. Grafik)",48,"Fehler")
If oBitmaps.hasByName(sInternalPicName) Then
oBitmaps.removeByName(sInternalPicName)
End If
Do While oDoc.hasControllersLocked
oDoc.unlockControllers
Loop
End Sub
[/code]