Недавно для экспорта таблицы OpenOffice пришлось создавать формулу, которая находила бы последнюю дату оплаты. А оплата в ods таблице была разнесена по колонкам, то есть идут колонки Январь, Февраль и т.д., а нам нужно сделать так, чтобы в одной колонке была дата вида гггг.мм.чч
Сделать такое получилось, хотя и остались вопросы, я так и не нашел, как передавать в параметре функции данные типа Range как в MS Excel. Пришлось параметр передавать в виде строки.
=GETLASTDATE(ADDRESS(ROW(CS3);COLUMN(CS3);4))
Дальше код на ooo.Basic - может кому будет полезно, ну или мне еще встретится этот вопрос)
function getLastDate(ByVal Optional sAddress As String) As String Dim oDoc As Object Dim oSheet As Object oDoc = ThisComponent oSheet = ThisComponent.CurrentController.ActiveSheet oStartCell = oSheet.getCellRangeByName(sAddress) nRows = oStartCell.CellAddress.Row nCols = oStartCell.CellAddress.Column i = nCols Do While i >= 0 oCell = oSheet.getCellByPosition(i, nRows) sItem = oCell.Formula if oCell.getType() then Exit Do End If i = i - 1 Loop getLastDate = formatLastDate(oCell) end function function formatLastDate(ByVal Optional Cell As Object) As String Dim oDoc As Object Dim oSheet As Object oDoc = ThisComponent oSheet = ThisComponent.CurrentController.ActiveSheet row = Cell.CellAddress.Row col = Cell.CellAddress.Column oYearCell = oSheet.getCellByPosition(col, 0) oMonthCell = oSheet.getCellByPosition(col, 1) sMonth = "" Select Case LCase(oMonthCell.Formula) Case "январь" sMonth = "01" Case "февраль" sMonth = "02" Case "март" sMonth = "03" Case "апрель" sMonth = "04" Case "май" sMonth = "05" Case "июнь" sMonth = "06" Case "июль" sMonth = "07" Case "август" sMonth = "08" Case "сентябрь" sMonth = "09" Case "октябрь" sMonth = "10" Case "ноябрь" sMonth = "11" Case "декабрь" sMonth = "12" End Select if sMonth <> "" Then formatLastDate = oYearCell.Formula & "-" & sMonth & "-" & "01" Else formatLastDate = "0000-00-00" End If end function