ActiveCell : the missing api


Mon 30 January 2006 By nuxeo

Calc API provides usefull methods to retreive current informations such as

ActiveSheet
or
CurrentSelection
.



If these api covers a lot of cases, some are not handled. Even inside
a range selection, there is an active cell, usually the last selected one,
depending on the way the range as been selected (from upper-left to
bottom-right, bottom-left to upper-right, ...). Unfortunatelly, the
CurrentSelection is only able to catch the range itself. The same problem
occurs on multiple selections



This ActiveCell concept is missing and may disturb new commers from
other office suite scripting like VBA.



Nevertheless, the OOo API allows to retreive this information. We can
define a function that returns the cell (in OOoBasic but will work in other
OOo supported languages via UNO
such as Python or
Java
).


function ActiveCell()

'retreives viewData

ViewData = ThisComponent.CurrentController.ViewData

'many sub-separators, unify - The content remains mysterious

ViewData = join(split(ViewData,";"),"/")

ViewData = join(split(ViewData,":"),"/")

ViewData = join(split(ViewData,"+"),"/") 'handles IV65535 !

'split the string

ViewData = split(ViewData,"/")

'retreives active positions

activeCol = ViewData(6)

activeRow = ViewData(7)

'get the activeCell

activeSheet = thisComponent.CurrentController.ActiveSheet

ActiveCell = activeSheet.getCellByPosition(activeCol,activeRow)

End function

This is very tricky as the
CurrentController.ViewData
is poorly documented. The returned string is
something like "100/60/0;0;tw:270;5/23/0/0/0/0/2/0/0/0/0;;". What does it
means ?

The only way seems to look into sources as the
IDL reference
does not give informations

Once the information clarified, this will go to the code
snippets repository
.



The best would be to enrich the API with some
CurrentController.ActiveCell though ...

(Post originally written by Laurent Godard on the old Nuxeo blogs.)


Category: Product & Development