Лямбда-функции в MS Excel

Автор kompilainenn, 1 февраля 2021, 13:34

0 Пользователи и 1 гость просматривают эту тему.

kompilainenn

Наткнулся на статью на Хабре про реализацию лямбда-функций в MS Excel.

https://habr.com/ru/news/t/540308/

Все больше убеждаюсь, что для пользования современным офисным пакетом нужно "сдавать на права"
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

eeigor

Спасибо, очень интересно. И как же Calc'у сложно поддерживать совместимость с Excel!..
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

economist

#2
Лямбды могут быть очень выразительны, нужно просто привыкнуть. В этом отношении особенно показателен Python, который есть в LO и даже "без установки". Вот к примеру есть таблица с колонкой
"Фамилия Имя Отчество", и нужно всех сократить до "Фамилия И. О." На Питоне можно так, однострочником:

f = 'Иванов Иван Иванович'
print(' '.join([f.split()[0], f.split()[-2][0]+'.', f.split()[-1][0]+'.']))


Но даже это можно завернуть красиво. С лямбдой famio() можно написать так:

famio = lambda f: ' '.join([f.split()[0], f.split()[-2][0]+'.', f.split()[-1][0]+'.'])
print(famio('Иванов Иван Иванович')) # даст Иванов И. И.


И сработает это очень быстро, быстрее чем горсть функций ЛЕСИМВ ПСТР НАЙТИ в формуле или цикл по ячейкам, примерно в ~10 раз. Вот когда хочется красиво и быстро (и понятно что делает код) - то лямбды.
 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

economist

#3
Кстати, вот темка https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=83856 о расширении  pystring.oxt, привносящее всю мощь и скорость строковых методов Python в Calc.

Также можно написать UDF-фуyкцию на Basic, внутри которой дернуть функцию на Python (и лямбду тоже) и вернуть в ячейку или вывести сообщение:


Function fio(s) As String
     scp = ThisComponent.getScriptProvider
     scmod = scp.getScript("vnd.sun.star.script:call_me.py$call_me?language=Python&location=user")
     returnFromPython = scmod.invoke(s, Array(), Array())
     print returnFromPython      
End Function
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

eeigor

Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community