Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenOffice pyuno "select all"

Does anyone know how to use the OO uno bridge api to "select all" in a Calc sheet?

Alternatively, finding the maximum used row and column number would work.

What I want to do is apply a format to all the cells in the spreadsheet.

(The reason being that I'm saving the sheet as csv, so numbers are not accurately saved unless the format provides enough decimal places.)

like image 321
c-urchin Avatar asked Oct 11 '22 16:10

c-urchin


2 Answers

Assuming you have already connected to OpenOffice and document is a spreadsheet that has been opened or created.

#get the sheet you want to work with, I'm just going to grab the first sheet
sheets = document.getSheets().createEnumeration()
sheet = sheets.nextElement()

#start with a range on the first cell
range = sheet.getCellRangeByPosition( 0, 0, 0, 0 )

#expand to full extend of the used area
range.gotoEndOfUsedArea( True ) #true for expand selection

#no do whatever formatting things you want to do
like image 172
bkulyk Avatar answered Oct 25 '22 00:10

bkulyk


I do get an error (Attribute Error) with the line:

range.gotoEndOfUsedArea(True)

By combining the two information at 1: http://nab.pcug.org.au/transferdemo_oocalc.py and 2: https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Cells_and_Ranges

I came up with the following solution:

def getLastActiveCell(sheet):
    """returns the last used column and row of the provided sheet 
    (ie the last cell in the range containing something other than '')"""
    #create a cursor for the whole sheet using OO interface XSheetCellRange 
    cursor = sheet.createCursor()
    #goto the last used cell
    cursor.gotoEndOfUsedArea(True)
    #grab that positions "coordinates"
    address = cursor.RangeAddress
    endcol = address.EndColumn
    endrow = address.EndRow
    #and pass them back
    return endcol,endrow

you may then access those values in your code like this:

lastCell = getLastActiveCell(sheetObject)
print lastCell[0] #Column
print lastCell[1] #Row

and create a range

 range = sheetObject.getCellRangeByPosition( 0, 0, lastCell[0], lastCell[1] )

or whatever for further work.

like image 24
Danfro Avatar answered Oct 24 '22 22:10

Danfro