From Frank Strunzkus:
This example goes through a notes view and exports some fields of each notes document into a table row in openoffice calc.
You can choose if the user should be able or not to see the OpenOffice application while the export agent is running. Once the OO file is ready it will be saved to harddisk.
My example requires a oo calc file that will be used as a template. This template will be filled with data comming from notes. (Google for examples, if you prefer to create a empty file rather than using a preformatted one like I prefer.)
To test my demo you first need to create the template file on your C: drive. Create a simple empty .ods file. My example requires that there is a at least one table in the file that has the name "Sheet1".
Option Public Option Declare ------------------------------------------ Class OOProperties 'I found this class in the OpenOffice forum and found it very usefull. Thanks for sharing it! 'This clase can be used to pass properties to OO Objects 'E.g. pass the Hidden=True property to the app object to run the application in the background 'If you do not have to set properties, you do not mandatory need this class in your code Private vProp() As Variant Private app As Variant Private vStruct As Variant Private bInz As Integer Sub new() Set App = createobject("com.sun.star.ServiceManager") Set vStruct = App.Bridge_GetStruct("com.sun.star.beans.PropertyValue") End Sub Sub addProperty(sName As String, vValue As Variant) If bInz Then Redim Preserve vProp(Ubound(vProp) + 1) Else Redim vProp(0) End If bInz = True vStruct.Name = sName vStruct.Value = vValue Set vProp(Ubound(vProp)) = vStruct End Sub Property Get Values() If Not bInz Then Me.addProperty "Dummy!", 0 bInz = True End If Values = vProp End Property End Class ------------------------------------------ Sub Initialize Dim session As New NotesSession Dim ws As New NotesUIWorkspace Dim fileOo As String Dim args() As Variant Dim prop As New OOProperties Dim App As Variant Dim objCoreReflection As Variant Dim objDesktop As Variant Dim objDocument As Variant Dim objSheet As Variant Dim cell As Variant Dim db As notesdatabase Set db = ws.CurrentDatabase.Database Dim view As NotesView 'The notes view that contains the data to export Set view = db.GetView("allpersons") Dim doc As NotesDocument 'A notes document that contains data to be exported Set doc = view.GetFirstDocument 'The filename of a file that should be used as a template. 'Using a template allows you to define columnheaders, set colors and add logos etc. in advance. 'You can even prepare charts that display your data from Notes graphically 'I normany use a function to export the template file from my notes database to the filesystem first. 'Remember that Openoffice uses / not \ you might have to convert your filepath. fileOo = "C:/MyEmptyTemplateFile.ods" 'Create objects that are required to work with openoffice Set App = createobject("com.sun.star.ServiceManager") 'The servicemanager Set objCoreReflection= App.createInstance("com.sun.star.reflection.CoreReflection") Set objDesktop = App.createInstance("com.sun.star.frame.Desktop") 'The main desktop object prop.addProperty "Hidden", True 'Decide to run Openoffice hidden in background or visible to the user Set objDocument = objDesktop.loadComponentFromURL("
file:///"+fileOo,"_blank", 0, prop.Values) 'Load the file Set objSheet = objDocument.Sheets.getByName("Sheet1") 'Define which Sheet to process. This sheet must exist in the template objDocument.CurrentController.setActiveSheet(objSheet) Dim rowposition As Integer 'current spreadsheet row Dim colposition As Integer 'current spreadsheet column rowposition = 3 'Note that the array starts at 0, to adress the first spreedsheet row 1 set rowposition = 0 While Not doc Is Nothing colposition = 0 Print "Preparing Spreadsheet, please wait! Processing "+ doc.Lastname(0) Call InsertSpreedsheetCellValue (objSheet, colposition ,rowposition, doc.Firstname(0)) Call InsertSpreedsheetCellValue (objSheet, colposition ,rowposition, doc.Lastname(0)) rowposition = rowposition+1 Set doc = view.GetNextDocument(doc) Wend Call objDocument.Store Call objDocument.close( True ) Msgbox "Your file is ready! "+fileOo End Sub ------------------------------------------ Sub InsertSpreedsheetCellValue (objSheet As Variant, colposition As Integer, rowposition As Integer, fieldvalue As String) Dim cell As Variant Set Cell = objSheet.getCellByPosition(colposition, rowposition) Cell.String = FieldValue colposition = colposition+1 End Sub