Bild per Makro einfügen, skalieren und positionieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

markus32
Beiträge: 3
Registriert: Mi, 04.12.2013 21:21

Bild per Makro einfügen, skalieren und positionieren

Beitrag von markus32 »

Hallo Openoffice-Freunde,

schlage mich schon seit paar Stunden rum und komme leider nicht weiter.
Hoffe Ihr könnt mir helfen.

Aufgabenstellung:
Habe eine Calc-Tabelle mir URLs von Bildern die auf meiner Festplatte sind (siehe Tabelle vorher bild).
Per Macro soll nun das Bild zu dem Link eingefügt werden. Die Höhe des Bilds soll bei gleichbleibendem Seitenverhältnis 5cm betragen.
Am Ende soll es dann so ausehen (siehe Bild Tabelle danach).

Frage:
wie man per Macro Bilder einfügt hab ich rausgefunden, aber wie kann ich festlegen, das als Quelle die eigene Tabelle verwendet wird fortlaufend?
Der Wert "Value" müsste dann immer der Pfad aus der Tabelle sein.

Code: Alles auswählen

dim args3(2) as new com.sun.star.beans.PropertyValue
args3(0).Name = "FileName"
args3(0).Value = "file://localhost/Volumes/Firma/001%20Bilder%20&%20Videos%20&%20PSD/Rohformate/Samsung_M8800_afsl_b.jpg"
args3(1).Name = "FilterName"
args3(1).Value = "JPEG - Joint Photographic Experts Group"
args3(2).Name = "AsLink"
args3(2).Value = false

dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args3())
Könnt Ihr mir helfen?

Gruß Markus
Dateianhänge
Tabelle danach
Tabelle danach
Bildschirmfoto 2013-12-04 um 21.19.06.png (165.5 KiB) 2695 mal betrachtet
Tabelle vorher
Tabelle vorher
Bildschirmfoto 2013-12-04 um 21.19.35.png (107.18 KiB) 2695 mal betrachtet
Zuletzt geändert von markus32 am Do, 05.12.2013 12:39, insgesamt 3-mal geändert.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Bild per Macro einfügen. Quelle in Tabelle

Beitrag von F3K Total »

Hi,
so sollte es für die Zellen A2 bis A5 gehen:

Code: Alles auswählen

Sub Main
    dim args3(2) as new com.sun.star.beans.PropertyValue
    osheet = thiscomponent.sheets.getbyname("Tabelle1")
    oRange = osheet.getcellrangebyname("A2:A5")
    for i = 0 to oRange.Rows.count - 1
        ocell = oRange.getcellbyposition(0,i)
        sUrl = converttourl(ocell.formula)
        args3(0).Name = "FileName"
        args3(0).Value = sUrl
        args3(1).Name = "FilterName"
        args3(1).Value = "JPEG - Joint Photographic Experts Group"
        args3(2).Name = "AsLink"
        args3(2).Value = false
        ... usw...

    next i
End Sub
Gruß R
markus32
Beiträge: 3
Registriert: Mi, 04.12.2013 21:21

Re: Bild per Macro einfügen. Quelle in Tabelle

Beitrag von markus32 »

Hallo R,

danke für die schnelle Hilfe.
Es funktioniert soweit, das die Bilder eingefügt werden.

Frage:
1- Weisst du wie ich die Bilder skalieren kann auf einen festen Wert von 5cm höhe. Das Seitenverhältnis soll 1:1 bleiben.
2- Die Bilder sollen in der jeweiligen Zeile angezeigt werden. Aktuell sind alle Bilder ganz oben übereinander.

Vielen Dank

Markus

der Code sieht jetzt so aus

Code: Alles auswählen

Sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


    dim args3(2) as new com.sun.star.beans.PropertyValue
    osheet = thiscomponent.sheets.getbyname("Tabelle1")
    oRange = osheet.getcellrangebyname("A2:A5")
    for i = 0 to oRange.Rows.count - 1
        ocell = oRange.getcellbyposition(0,i)
        sUrl = converttourl(ocell.formula)
        args3(0).Name = "FileName"
        args3(0).Value = sUrl
        args3(1).Name = "FilterName"
        args3(1).Value = "JPEG - Joint Photographic Experts Group"
        args3(2).Name = "AsLink"
        args3(2).Value = false
 
dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args3())
       
   next i
   
End Sub
Dateianhänge
aktuelles Ergebnis zum code
aktuelles Ergebnis zum code
Bildschirmfoto 2013-12-05 um 01.40.55.png (203.02 KiB) 2669 mal betrachtet
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Bild per Makro einfügen, skalieren und positionieren

Beitrag von F3K Total »

So,
anbei zwei Makros, rufe das erste, S_Find_cells, auf, dann werden die Bilder in der Größe, die du im Code eingestellt hast eingefügt und sogar benamst (Rechte Maus auf Bild -> Name)

Code: Alles auswählen

Sub S_Find_cells
    dim nlength as integer
    odoc = Thiscomponent
    osheet = odoc.sheets.getbyname("Tabelle1")
    oPage = osheet.drawpage
    oRange = osheet.getcellrangebyname("A2:A6")'<------ Spalte mit Hyperlinks
    for i = 0 to oRange.Rows.count - 1
        ocell = oRange.getcellbyposition(0,i)
        sUrl = converttourl(ocell.formula)
        if sUrl = "" then goto 100
        nlength = len(sUrl)
        for k = 1 to nlength - 1
            if mid(sUrl,nlength-k,1) = "." then  
                nExtension = nlength - k
            endif
            if mid(sUrl,nlength - k,1) = "/" then  
                nBackslash = nlength-k
                exit for
            endif
        next k
        sGrafikname = mid(sUrl,nBackslash + 1, nExtension-nBackslash-1)
        insertgrafik(opage,ocell,surl,odoc,sgrafikname)
        100:
    next i
end sub

Sub insertgrafik(opage,ocell,urlgrafik,odoc,grafikname)
    Dim Size As New com.sun.star.awt.Size
    Dim Size_max As New com.sun.star.awt.Size
    oGrafik = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
    oGrafik.GraphicURL = urlgrafik
    oGrafik.name = grafikname
    'Ankerposition festlegen   
    opage.add(oGrafik)
    oGrafik.Anchor = oCell
    Size_max.width = 7000'<------ max. Bildbreite
    Size_max.height = 5000'<------ max. Bildhöhe
    new_Original_Size = oGrafik.Graphic.SizePixel
    Factor_Width=Size_max.width/new_Original_Size.width
    Factor_Height=Size_max.Height/new_Original_Size.Height
    if Factor_Width<=Factor_Height then 
        factor=Factor_Width
    else
        factor=Factor_Height
    endif
    size.width = new_Original_Size.width*factor
    size.Height = new_Original_Size.Height*factor
    oGrafik.setSize(size)
End Sub
Gruß R
Antworten