Difference between revisions of "Groovy UNO Extension"

From Apache OpenOffice Wiki
Jump to: navigation, search
(added page and some text)
 
Line 18: Line 18:
 
     xSheet = (XSpreadsheet) UnoRuntime.queryInterface(
 
     xSheet = (XSpreadsheet) UnoRuntime.queryInterface(
 
       XSpreadsheet.class, oIndexSheets.getByIndex(0));
 
       XSpreadsheet.class, oIndexSheets.getByIndex(0));
 
 
     xCell = xSheet.getCellByPosition(1,0);
 
     xCell = xSheet.getCellByPosition(1,0);
 
     xCell.setFormula("Sample");
 
     xCell.setFormula("Sample");
Line 25: Line 24:
 
Groovy Extension way
 
Groovy Extension way
 
     XSpreadsheet xSheet = myDoc.getSheetByIndex(0)
 
     XSpreadsheet xSheet = myDoc.getSheetByIndex(0)
 
 
     xSheet.setTextToCell(1,0,"Sample")
 
     xSheet.setTextToCell(1,0,"Sample")
  
Using Groovy without the extension allows removing the Interface cast on the right side and other not using semi-colons.<br />
+
Using Groovy without the extension allows removing the Interface cast on the right side and not using semi-colons.<br />
The folowing examples are in that style and other than that, similar to the Java way.
+
The following examples are in that style and other than that, similar to the Java way.
  
 
'''Setting the Cell Style property'''
 
'''Setting the Cell Style property'''
 +
The extension adds a setter method for CellStyle allowing what looks like property access to cellStyle. ToDo add getter method<br />
 
Without Extension
 
Without Extension
 
   XPropertySet xCellProps = UnoRuntime.queryInterface(XPropertySet.class, xCell)
 
   XPropertySet xCellProps = UnoRuntime.queryInterface(XPropertySet.class, xCell)
Line 48: Line 47:
  
  
Setting the active sheet
+
'''Setting the active sheet'''
MORE CODE TO GET MODEL
+
Without Extension but using SpreadsheetDocHelper.groovy included with the [[OpenOfficeGradleIntegration]] aoo-client template.
...
+
    XModel xSpreadsheetModel = sdHelper.getModel()
XModel xSpreadsheetModel = sdHelper.getModel()
+
    XController xSpreadsheetController = xSpreadsheetModel.getCurrentController()
           
+
    XSpreadsheetView xSpreadsheetView = UnoRuntime.queryInterface(XSpreadsheetView.class, xSpreadsheetController)
XController xSpreadsheetController = xSpreadsheetModel.getCurrentController()
+
    xSpreadsheetView.setActiveSheet(xSpreadsheet)
           
+
XSpreadsheetView xSpreadsheetView = UnoRuntime.queryInterface(XSpreadsheetView.class,
+
    xSpreadsheetController)
+
 
+
XSpreadsheetView xSpreadsheetView = sdHelper.getSpreadsheetView()
+
 
+
xSpreadsheetView.setActiveSheet(xSpreadsheet)
+
 
+
with extension
+
XSpreadsheetView xSpreadsheetView = sdHelper.getSpreadsheetView()
+
  
xSpreadsheetView.setActiveSheet(xSpreadsheet)
+
With extension and a SpreadsheetDocHelper.groovy method to get the XSpreadsheetView directly
 +
    XSpreadsheetView xSpreadsheetView = sdHelper.getSpreadsheetView()
 +
    xSpreadsheetView.setActiveSheet(xSpreadsheet)
  
  

Revision as of 11:34, 5 January 2016

Overview

ToDo

Getting Started

ToDo

Usage

The best way to explain the differences between the Java UNO API's and using Groovy with and without the extension is with some example code. A lot of the examples are from SCalc.java that is included with the AOO SDK.
Leaving out try/catch for brevity and assumes we have a reference to XSpreadsheetDocument myDoc..

Get the first sheet in the spreadsheet document and insert data into a cell

Java way

   XSpreadsheets xSheets = myDoc.getSheets() ;
   XIndexAccess oIndexSheets = (XIndexAccess) UnoRuntime.queryInterface(
       XIndexAccess.class, xSheets);
   xSheet = (XSpreadsheet) UnoRuntime.queryInterface(
      XSpreadsheet.class, oIndexSheets.getByIndex(0));
   xCell = xSheet.getCellByPosition(1,0);
   xCell.setFormula("Sample");


Groovy Extension way

   XSpreadsheet xSheet = myDoc.getSheetByIndex(0)
   xSheet.setTextToCell(1,0,"Sample")

Using Groovy without the extension allows removing the Interface cast on the right side and not using semi-colons.
The following examples are in that style and other than that, similar to the Java way.

Setting the Cell Style property The extension adds a setter method for CellStyle allowing what looks like property access to cellStyle. ToDo add getter method
Without Extension

  XPropertySet xCellProps = UnoRuntime.queryInterface(XPropertySet.class, xCell)
  xCellProps.setPropertyValue("CellStyle", "Result")

With extension

  xCell.cellStyle = "Result"


Using Enum Types The extension adds getter and setter methods for CellVertJustify allowing what looks like property access to vertJustify.
Without extension

   xCellProps.setPropertyValue("VertJustify", com.sun.star.table.CellVertJustify.TOP)

With extension

   xCell.vertJustify = com.sun.star.table.CellVertJustify.TOP


Setting the active sheet Without Extension but using SpreadsheetDocHelper.groovy included with the OpenOfficeGradleIntegration aoo-client template.

   XModel xSpreadsheetModel = sdHelper.getModel()
   XController xSpreadsheetController = xSpreadsheetModel.getCurrentController()
   XSpreadsheetView xSpreadsheetView = UnoRuntime.queryInterface(XSpreadsheetView.class, xSpreadsheetController)
   xSpreadsheetView.setActiveSheet(xSpreadsheet)

With extension and a SpreadsheetDocHelper.groovy method to get the XSpreadsheetView directly

   XSpreadsheetView xSpreadsheetView = sdHelper.getSpreadsheetView()
   xSpreadsheetView.setActiveSheet(xSpreadsheet)


get cell ranges XCellRangesQuery xCellQuery = UnoRuntime.queryInterface(XCellRangesQuery.class, xSpreadsheet)

XSheetCellRanges xFormulaCells = xCellQuery.queryContentCells((short)CellFlags.FORMULA)

with extension XSheetCellRanges xFormulaCells = xSpreadsheet.getCellRanges(CellFlags.FORMULA)


// example for use of XEnumerationAccess XEnumerationAccess xFormulas = xFormulaCells.getCells() XEnumeration xFormulaEnum = xFormulas.createEnumeration()

while (xFormulaEnum.hasMoreElements()) {

   Object formulaCell = xFormulaEnum.nextElement()
   xCell = UnoRuntime.queryInterface(XCell.class, formulaCell)
   XCellAddressable xCellAddress = UnoRuntime.queryInterface(XCellAddressable.class, xCell)
   println("Formula cell in column " +
       xCellAddress.getCellAddress().Column
       + ", row " + xCellAddress.getCellAddress().Row
       + " contains " + xCell.getFormula())
   }

with extension XCell[] cellList = xFormulaCells.cellList cellList.each() {println("Formula cell in column ${it.address.Column}, " +

   "row ${it.address.Row} contains ${it.formula}")

}

// Create a new cell range container com.sun.star.lang.XMultiServiceFactory xDocFactory = UnoRuntime.queryInterface(

   com.sun.star.lang.XMultiServiceFactory.class, xSpreadsheetDocument)
        

com.sun.star.sheet.XSheetCellRangeContainer xRangeCont = UnoRuntime.queryInterface(

   com.sun.star.sheet.XSheetCellRangeContainer.class,
   xDocFactory.createInstance("com.sun.star.sheet.SheetCellRanges"));

with extension XSheetCellRangeContainer xRangeCont = xSpreadsheetDocument.rangeContainer


// Query the list of filled cells from a range container

print("All filled cells: ") com.sun.star.container.XEnumerationAccess xCellsEA = xRangeCont.getCells() com.sun.star.container.XEnumeration xEnum = xCellsEA.createEnumeration()

while (xEnum.hasMoreElements()) {

   Object aCellObj = xEnum.nextElement()
   com.sun.star.sheet.XCellAddressable xAddr = UnoRuntime.queryInterface(
       com.sun.star.sheet.XCellAddressable.class, aCellObj)
   com.sun.star.table.CellAddress aAddr = xAddr.getCellAddress()
   println(sdHelper.getCellAddressString(aAddr.Column, aAddr.Row) + " ")

}


with extension

// example for using a closure to iterate through list of cells XCell[] cellList2 = xRangeCont.cellList print("All filled cells: ") cellList2.each() {println("Formula cell in column ${it.address.Column}, " +

   "row ${it.address.Row} contains ${it.formula}")

}

Personal tools