Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

31 Июль 2021, 18:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Лямбда-функции в MS Excel  (Прочитано 1582 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 3 308



« Стартовое сообщение: 1 Февраль 2021, 13:34 »

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

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

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

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 626



« Ответ #1: 1 Февраль 2021, 16:44 »

Спасибо, очень интересно. И как же Calc’у сложно поддерживать совместимость с Excel!..
Записан

Ubuntu 18.04 LTS • LO 7.1.3.2 Community
economist
Форумчанин
***
Offline Offline

Сообщений: 1 514


« Ответ #2: 1 Февраль 2021, 16:53 »

Лямбды могут быть очень выразительны, нужно просто привыкнуть. В этом отношении особенно показателен 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 раз. Вот когда хочется красиво и быстро (и понятно что делает код) - то лямбды.
  
« Последнее редактирование: 2 Февраль 2021, 14:04 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
economist
Форумчанин
***
Offline Offline

Сообщений: 1 514


« Ответ #3: 1 Февраль 2021, 17:09 »

Кстати, вот темка 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
« Последнее редактирование: 1 Февраль 2021, 17:13 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 626



« Ответ #4: 3 Февраль 2021, 17:52 »

Да, вроде, несложно
…если есть такой Excel
https://insider.office.com/en-us/blog/lambda-excel-custom-functions
Записан

Ubuntu 18.04 LTS • LO 7.1.3.2 Community
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!