| View previous topic :: View next topic |
| Author |
Message |
jrfonseca Newbie

Joined: 26 Jul 2007 Posts: 3
|
Posted: Thu Jul 26, 2007 6:02 pm Post subject: Export all charts from a Calc spreadsheet to EPS |
|
|
I needed to export all chars in a Calc spreadsheet to EPS to include a LaTeX report, so I wrote this macro based on snippets from other posts.
| Code: | ' Export all charts from a Calc spreadsheet -- Jose Fonseca
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()
storeUrl = Left( storeUrl, Len( storeUrl ) - 4 )
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
' Select the chart shape.
oDocCtrl.select( oShape )
oDispatchHelper.executeDispatch( oDocFrame, ".uno:Copy", "", 0, Array() )
' export the chart
nCharts = nCharts + 1
ExportSelection( storeUrl + "_chart" + nCharts + ".eps", "image/x-eps" )
EndIf
EndIf
EndIf
Next
Next
End Sub
Sub ExportSelection(url As String, mediaType As String)
' Create a new Draw document
Dim aArgs(1) As New com.sun.star.beans.PropertyValue
aArgs(0).Name = "Hidden"
aArgs(0).Value = True
oDrawDoc = StarDesktop.loadComponentFromURL( "private:factory/sdraw", "_blank", 0, aArgs() )
' Past current selection
Dim oDrawDocCtrl, oDrawDocFrame, oDispatchHelper
oDrawDocCtrl = oDrawDoc.getCurrentController()
oDrawDocFrame = oDrawDocCtrl.getFrame()
oDispatchHelper = createUnoService( "com.sun.star.frame.DispatchHelper" )
oDispatchHelper.executeDispatch( oDrawDocFrame, ".uno:Paste", "", 0, Array() )
' Get an export filter object
Dim exportFilter
exportFilter = createUnoService( "com.sun.star.drawing.GraphicExportFilter" )
' get first draw page
Dim oDrawPages, oDrawPage, oShape
oDrawPages = oDrawDoc.getDrawPages()
oDrawPage = oDrawPages.getByIndex( 0 )
oShape = oDrawPage.getByIndex( 0 )
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
|
For more information, see also:
|
|
| Back to top |
|
 |
sanderbakkes Newbie

Joined: 13 Jun 2008 Posts: 1
|
Posted: Fri Jun 13, 2008 5:31 am Post subject: |
|
|
| i registered just to say that you are a hero, thanks man! |
|
| Back to top |
|
 |
alexis779 Newbie

Joined: 31 Aug 2008 Posts: 2
|
Posted: Sun Aug 31, 2008 6:44 am Post subject: does not support special characters |
|
|
Hi,
First i wanted to say I used the macro to convert my charts in Calc to eps files so that i can include them in a latex document.
It works fine for english-language charts but a big problem is that it does not support characters with accents like "á é í ó ú" or greek letters like lambda.
If you could please update your macro so that it can render them properly it would be of even greater use for the non-english users.
Thanks |
|
| Back to top |
|
 |
alexis779 Newbie

Joined: 31 Aug 2008 Posts: 2
|
|
| Back to top |
|
 |
steve@sliderule Newbie

Joined: 14 Sep 2008 Posts: 1
|
Posted: Sun Sep 14, 2008 7:05 am Post subject: Brilliant |
|
|
I registered with this form just to say,
Thanks very much I now have decent graphs in my Lyx document without running multiple apps.
Steve.  |
|
| Back to top |
|
 |
climater Newbie

Joined: 30 Oct 2009 Posts: 2
|
Posted: Fri Oct 30, 2009 5:50 pm Post subject: |
|
|
Hello,
Could anyone help to verify if Jose's macro is still working? I tried it in OO Calc 3.1.1 on Windows XP, but it gave me an error message "Action not supported. Invalid procedure call", pointing to the following line of code:
storeUrl = Left( storeUrl, Len( storeUrl ) - 4 )
Thanks,
David |
|
| Back to top |
|
 |
climater Newbie

Joined: 30 Oct 2009 Posts: 2
|
Posted: Fri Oct 30, 2009 6:41 pm Post subject: |
|
|
| Sorry, please ignore my previous message. For whatever reasons unknown to me, the macro is now working! Thanks, Jose, for this wonderful tool! |
|
| Back to top |
|
 |
RalfG Newbie

Joined: 23 Feb 2010 Posts: 3
|
Posted: Wed Feb 24, 2010 8:29 am Post subject: |
|
|
| climater wrote: | Hello,
Could anyone help to verify if Jose's macro is still working? I tried it in OO Calc 3.1.1 on Windows XP, but it gave me an error message "Action not supported. Invalid procedure call", pointing to the following line of code:
storeUrl = Left( storeUrl, Len( storeUrl ) - 4 )
Thanks,
David |
Hi Dave,
I had the same error - and this was the reason:
Before saving a document, its storeUrl would be an blank string "" (Unnamed).
Now, try to substract the extension (4 chars) from an empty string...!
You can fix this by:
if Len(storeUrl)>3 then
storeUrl = Left( storeUrl, Len( storeUrl ) - 4 )
endif |
|
| Back to top |
|
 |
jrfonseca Newbie

Joined: 26 Jul 2007 Posts: 3
|
Posted: Fri Mar 19, 2010 8:17 am Post subject: |
|
|
I was requested to license the above macro, here it is:
/**************************************************************************
*
* Copyright 2007 Jose Fonseca
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sub license, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
* THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions
* of the Software.
*
**************************************************************************/ |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|