ich möchte bei einem Calc-Dokument mit mehreren Tabellenblättern via Makro das jeweile zum Tabellenblatt gehörende Diagramm als Bild exportieren.
Fast alles klappt bereits, aber hier komme ich nicht mehr weiter.
Derzeit wird die Zahldes im Feld F2 des ersten Tabellenblattes (0) als Dateiname verwendet, aber das Diagramm aus dem letzten Tabellenblatt (3).
Lösbar wäre es wohl, wenn ich die Libre-Nummer des aktuellen Tabellenblattes ermitteln könnte und dann für das Auslesen der Zahl und das Bekommen des richtigen Diagramm verwenden könnte.
Ich weiß nur leider nicht, wie ich diese Zahl ermittle und wie ich sie dann für das Bekommen des richtigen Diagramms verwenden kann. Hier mein bisheriger Code:
Code: Alles auswählen
' Export all charts from a Calc spreadsheet -- based on a Draft by Jose Fonseca
' Now exports shapes directly from calc without using clipboard/draw -- changed by Christian Lippka
' (cf. http://www.oooforum.org/forum/viewtopic.phtml?t=60155)
Sub Main
Dim oDoc, oDocCtrl, oDocFrame, oDispatchHelper
oDoc = ThisComponent
oDocCtrl = oDoc.getCurrentController()
oDocFrame = oDocCtrl.getFrame()
oDispatchHelper = createUnoService( "com.sun.star.frame.DispatchHelper" )
Dim storeUrl
storeUrl = oDoc.getURL()
if storeUrl <>"" then
storeUrl = Left( storeUrl, Len( storeUrl ) - 10 ) 'der Dateiname wird abgeschnitten - dazu muss der Dateiname 6-stellig sein
Endif
Dim artikelNummer as string
artikelNummer = thisComponent.sheets(0).getCellRangeByName("F1").string 'Die Zahl aus dem Feld F1 des ersten Tabellenblattes wird ausgelesen
Dim dateiPfad
dateiPfad = storeUrl + artikelNummer 'Der Dateipfad und die Zahl aus dem Feld F2 werden zusammengesetzt.
nCharts = 0
' Search the draw page for the chart.
Dim oSheets, oSheet, oDrawPage, oShape
oSheets = oDoc.getSheets()
For i = 0 to oSheets.getCount() - 1
oSheet = oSheets.getByIndex( i )
oDrawPage = oSheet.getDrawPage()
For j = 0 to oDrawPage.getCount() - 1
oShape = oDrawPage.getByIndex( j )
' Can't call supportsService unless the com.sun.star.lang.XServiceInfo is present.
If HasUnoInterfaces( oShape, "com.sun.star.lang.XServiceInfo" ) Then
If oShape.supportsService( "com.sun.star.drawing.OLE2Shape" ) Then
' Is it a Chart?
If oShape.CLSID = "12DCAE26-281F-416F-a234-c3086127382e" Then
' export the chart
nCharts = nCharts + 1
ExportSelection( oShape, dateiPfad + ".jpg", "image/jpg" )
EndIf
EndIf
EndIf
Next
Next
End Sub
Sub ExportSelection( oShape As Object, url As String, mediaType As String)
' Get an export filter object
Dim exportFilter
exportFilter = createUnoService( "com.sun.star.drawing.GraphicExportFilter" )
exportFilter.setSourceDocument( oShape )
' Set the filter data
Dim aFilterData(5) As New com.sun.star.beans.PropertyValue
aFilterData(0).Name = "Level" '1=PS level 1, 2=PS level 2
aFilterData(0).Value = 2
aFilterData(1).Name = "ColorFormat" '1=color, 2=grayscale
aFilterData(1).Value = 1
aFilterData(2).Name = "TextMode" '0=glyph outlines, 1=no glyph outlines, see ooo bug 7918
aFilterData(2).Value = 1
aFilterData(3).Name = "Preview" '0=none, 1=TIFF, 2=EPSI, 3=TIFF+EPSI
aFilterData(3).Value = 0
aFilterData(4).Name = "CompressionMode" '1=LZW, 2=none
aFilterData(4).Value = 2
Dim aProps(2) As New com.sun.star.beans.PropertyValue
aProps(0).Name = "MediaType"
aProps(0).Value = mediaType
aProps(1).Name = "URL"
aProps(1).Value = url
aProps(2).Name = "FilterData"
aProps(2).Value = aFilterData()
exportFilter.filter( aProps() )
End Sub