Java UNO Calc API: detect empty cell
Eike Rathke
erack at redhat.com
Fri Aug 21 10:42:29 PDT 2015
Hi Mikhail,
On Friday, 2015-08-21 16:37:21 +0300, Mikhail Zemlyanukha wrote:
> In my LibO Calc Java extension I have a worksheet function receiving
> an argument declared as 'any' type in IDL, so I can detect a missing
> parameter. But I would like to detect also an empty cell, if that
> parameter holds a cell reference.
You could declare a parameter of type table::XCellRange, which gets such
cell range object passed. From that you could obtain, via
XCellRangesQuery interface's queryContentCells(),
a sheet::XSheetCellRanges object. Note that there is also
XCellRangesQuery::queryEmptyCells() but that regards cells that hold
only a note/annotation as non-empty, which may not be what you want.
At least in theory from looking at the source code, I didn't try..
> Seems that I can't do that because the function receives a Double
> value 0.0 for an empty cell. When I pass a cell range, I do receive a
> 2-dimensional array of values (of type String) with empty strings (not
> null) so I can't check if a cell is empty either.
"pass a cell range" is the parameter declared as receiving the
XCellRange I mentioned?
> I see there's ISBLANK() builtin worksheet function, is my
> understanding correct that such functionality is not available via
> Java UNO API, but is available for built-in functions using some other
> API (not UNO). Is it available for C/C++ extensions?
C/C++ UNO API is the same as for Java.
> I understand this that formula engine evaluates parameters before
> passing them to a function, so a cell reference to an empty cell gets
> converted to a double 0.0 value
... if the parameter is declared as double or double[][] or a single
cell reference passed to any[][].
> (while for a range empty cells are
> converted to strings, that's a bit strange, but it's another story).
Yes, that's somewhat inconsistent, if we're talking about the any[][]
getting a range reference passed. On the other hand, there are no cells
with an empty string content unless it is a formula cell with an empty
string result.
> Why empty cells are not converted to java null values, or Any data
> type, which can hold Void value (this is the case for a missing
> parameter)?
Why? Because. I don't know. Maybe an empty Any might had been better in
this case.
> Is there any any info about Calc's function evaluation engine I can
> read, only source code? ))
The Add-In calls are in sc/source/core/tool/interpr4.cxx
ScInterpreter::ScExternal(), XCellRange and XCellRanges objects in
sc/source/ui/unoobj/cellsuno.cxx ScCellRangeObj and ScCellRangesObj.
Hope that helps
Eike
--
LibreOffice Calc developer. Number formatter stricken i18n transpositionizer.
GPG key "ID" 0x65632D3A - 2265 D7F3 A7B0 95CC 3918 630B 6A6C D5B7 6563 2D3A
Better use 64-bit 0x6A6CD5B765632D3A here is why: https://evil32.com/
Care about Free Software, support the FSFE https://fsfe.org/support/?erack
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20150821/3e3fe806/attachment.sig>
More information about the LibreOffice
mailing list