Calc + dll + Base

Автор SobyDa, 13 сентября 2022, 19:04

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

SobyDa

Доброго времени суток!

Как и многие счастливчики столкнулся с проблемами переезда с Excel на Calc. Причём сразу на Linux.
Основной функционал перенёсся без особых проблем. Повисли в основном 2 проблемы.
1. Не получается подключить внешнюю библиотеку dll.
2. Не нашёл способа (он есть, просто не могу найти нормальную реализацию) записи вносимых данных в базу данных (Base).

Документ представляет из себя форму ввода данных. После их ввода, опираясь на внутренние функции и на функции из библиотеки внешней, выдаёт нужные данные. Данные выгружаются в отдельный файл Calc и сохраняются в базе данных.

Прошу любой помощи. Ссылки, примеры реализаций, посылы к источникам.


sokol92

#1
Цитата: SobyDa от 13 сентября 2022, 19:04Не получается подключить внешнюю библиотеку dll.
Что именно делает эта библиотека? Файлы такого формата не переносятся в Linux (если только не использовать Wine и подобные инструменты).
Цитата: SobyDa от 13 сентября 2022, 19:04. Не нашёл способа (он есть, просто не могу найти нормальную реализацию) записи вносимых данных в базу данных (Base).
Компонента Base может взаимодействовать с различными базами данных (включая встроенные). Нужна конкретика.
Владимир.

SobyDa

1. Библиотека свойств воды и водяного пара.
Есть готовая под винду (в приложении), но можно и пересобрать под Линух.
Ссылка на сам проект: http://www.coolprop.org/index.html#
2. Не совсем понял вопрос. До этого данные сохранялись просто в самом экселе. Теперь хотелось бы хранить их в базе данных. На базе libre base. Компы, где будет использоваться, без всего лишнего.

mikekaganski

Цитата: SobyDa от 14 сентября 2022, 11:111. Библиотека свойств воды и водяного пара.
Есть готовая под винду (в приложении), но можно и пересобрать под Линух.
Ссылка на сам проект: http://www.coolprop.org/index.html#

https://github.com/CoolProp/CoolProp/issues/1989
С уважением,
Михаил Каганский

SobyDa

На компьютере, где будут использовать это в дальнейшем нет возможности что-либо устанавливать. Соответственно делать надстройку через питон не получится.
Или я что-то неправильно понял?

economist

У других работает. Если расширение нужно - обеспечить его установку ваша или чья-то прямая обязанность. По ссылке есть команда для консоли с pip3 install...
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

mikekaganski

Расширение CoolProp для LibreOffice может использовать только CoolProp Python wrapper. Несколько лет назад я подключал CoolProp.dll непосредственно к LibreOffice Basic через Declare, но это работает только под Windows.

Поэтому если у Вас нет возможности установить CoolProp в Python, вряд ли Вы сможете его использовать.
С уважением,
Михаил Каганский

SobyDa

Цитата: economist от 14 сентября 2022, 18:41У других работает. Если расширение нужно - обеспечить его установку ваша или чья-то прямая обязанность. По ссылке есть команда для консоли с pip3 install...
Не совсем так. Нужно обеспечить функционал без какого бы то ни было вмешательства. Чтоб работало из под обычной урезанной учётки без установок.
Под виндой это всё было реализовано через Declare. В Линухах оно не работает. Поэтому и запросил помощи.

Цитата: mikekaganski от 15 сентября 2022, 08:52Несколько лет назад я подключал CoolProp.dll непосредственно к LibreOffice Basic через Declare, но это работает только под Windows.
Да, именно так. Поэтому и подумалось, что в Линукс можно сделать аналогично, но не смог найти как.

Цитата: mikekaganski от 15 сентября 2022, 08:52Поэтому если у Вас нет возможности установить CoolProp в Python, вряд ли Вы сможете его использовать.
Прямо грустно. Неужели нет возможности в Либер под Линукс подтянуть библиотеку? Может её пересобрать в статическом виде или как-то иначе?
К сожалению, не силён в этом вопросе.

economist

Цитата: SobyDa от 15 сентября 2022, 11:05...без какого бы то ни было вмешательства. Чтоб работало из под обычной урезанной учётки без установок

Это как вытащить рыбку "без пруда"? Поменять все-таки что-то придется. Пакеты под Linux для Python можно:
- ставить не под root, а под user, с флагом --user
- ставить из готового файла, без интернета
- поставить под root, но потому сменить права
- просто скопировать в папку site-packages домашней/системной директории, простой код иногда работает.

Другое дело что в Linux легко запутаться с его системным/несистемным Питоном и pip3/pip (Python 2/3), это надо перетерпеть. Если есть исходники и понимание либы - можно попробовать ее переписать/повторить на чем-нибудь удобном.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

SobyDa

Цитата: economist от 15 сентября 2022, 11:33- просто скопировать в папку site-packages домашней/системной директории, простой код иногда работает.
Можно пример подобного? Этот вариант может подойти.

Цитата: economist от 15 сентября 2022, 11:33Если есть исходники и понимание либы - можно попробовать ее переписать/повторить на чем-нибудь удобном.
Исходники на гитхабе лежат. Не понял что даст переписать либу?
Была мысль нужный кусок загнать в код файла, но он достаточно огромен. Потребует большого количества времени, которого нет.

mikekaganski

#10
Цитата: SobyDa от 15 сентября 2022, 11:05Неужели нет возможности в Либер под Линукс подтянуть библиотеку?

Именно - такой возможности нет (и не будет, пока кто-нибудь не напишет).

Вызов функций, объявленных через Declare, реализован функцией SbiRuntime::DllCall. Она использует SbiDllMgr (менеджер динамических библиотек), который для разных платформ реализован отдельно.

Для Windows x32 и x64 реализации действительно загружают и выгружают DLL, обрабатывают передачу данных из Basic в низкоуровневые примитивы и обратно, ищут функции по имени, вызывают их ...

А для остальных платформ есть заглушка, которая знает, как эмулировать две функции из kernel32: QueryPerformanceFrequency и QueryPerformanceCounter; а для всего остального (любых не-kernel32 библиотек, и любых функций кроме вышеназванных) возвращает ошибку ERRCODE_BASIC_NOT_IMPLEMENTED.
С уважением,
Михаил Каганский

economist

Установленный пакет/либа в Python - это в простых случаях скопированная в папку site_packages подпапка с файлом *.py и __init__.py, который м.б. пустым. Понять какой именно у вас случай можно только попробовав авто или ручную установку из: http://www.coolprop.org/coolprop/wrappers/LibreOffice/index.html

Для установки из "колес", т.е. из wheel - нужно заранее выполнить в консоли Linux: pip3 install wheel Если у вас нет доступа к консоли в Linux - отдайте задачу тому у кого он есть.

Сама обсуждаемая библиотека, действительно, большая и сложная. Если речь об использовании значительной ее части - нужно идти по пути, предложенной ее авторами. Там куча оберток для разных языков. Вернуть готовый результаты их работы в OpenOffice|LibreOffice Writer/Calc можно макросом или UDF. Без затрат времени, увы, никак. OpenOffice|LibreOffice Basic в этом смысле особенно жесток: время, ранее потраченное на поиск решения в VBA - тут можно смело умножать на 4.

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

mikekaganski

Цитата: economist от 15 сентября 2022, 13:45Сама обсуждаемая библиотека, действительно, большая и сложная.

Это точно.
Ян - большая умница, начал писать эту библиотеку, ещё работая в университете Льежа. До неё вообще кроме коммерческой REFPROP ничего не было. И потом, когда его работы по термодинамике привели его в NIST (к создателям той самой коммерческой REFPROP), он продолжает разрабатывать свою COOLPROP. Там такая куча специальных знаний вбухана ...
(покрасуюсь: там и мои патчи есть :) )
С уважением,
Михаил Каганский

SobyDa

#13
Благодарю за разъяснения. Стало более понятно, что делать. Буду пробовать.
По поводу самой библиотеки - полностью согласен. Прям спасение. Объём функционала поражает. Использую её теперь везде и всегда. Существенно упрощает вычисления.

По поводу второго вопроса по базе данных.
Лист Calc имеет несколько ячеек, куда вводятся данные. В других ячейках данные считаются по введённым.
Далее требуется по кнопке выгрузить все необходимые ячейки в базу данных. Видимо изначально её создать и туда подгружать данные.
Можно также направление движения? У Питоньяка за 2008г не нашёл.

sokol92

У А.Питоньяка есть отдельная книга, посвященная Base. Эта книга имеется в виду?
Владимир.