Вынужденный переезд с EXCEL и ворох проблем

Автор aiva, 29 апреля 2022, 02:01

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

aiva

Здравствуйте, уважаемые гуру ОО, в связи с "импортозамещением" приходится переезжать на Libre|Open Office.
И возникло невообразимое количество проблем начиная от полного непонимания экселевских макросов (хотя тот же VB не понимаю в чем проблема, но разберусь позже) и заканчивая использованием данных из внешних баз данных (простите за тавтологию) в частности MySQL.
В двух словах на пальцах. Есть mysql база. очень жирная толстая и тяжелая. в ней ведутся определенные данные по аргументу времени с кучей параметров пишущихся раз в 10 сек в формате понятном экселю (система дат 1900).
В эксель файле сделан запрос к MySQL посредством ODBC на извлечение определенных данных по условию аргумент больше такой то даты (которая берется из ячейки в экселевском документе) и меньше такой то даты (опять же из другой ячейки в экселевском документе).
Как это прикрутить к ОО я вообще не понимаю. Ладно получилось прикрутить доступ к MySQL опять же через ODBC, но оно зачем-то файл создало.
А как задать условия получения данных то? если руками например в мастере запросов говорить WHERE Argument >47999.3333333 AND Argument < 48000.000000 (к примеру) - оно ругается, что так нельзя.
Еще один нюанс, в MySQL десятичный разделитель точка. в ОО я так не не победил эту запятую.
Помогите пожалуйста, нанять "адекватных" людей наша организация зажала, и свалили всё на обычных сотрудников.

economist

Цитата: aiva от 29 апреля 2022, 02:01оно ругается, что так нельзя.

Нажмите на кнопку [SQL] - Выполнить команду SQL непосредственно.

Десятичная точка на самом деле везде, Если она не распознается - значит значение (полагаю в Calc/Writer из Base) передается как текст, а не как число.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

mikekaganski

Обратите внимание, что OOo/LibreOffice - не является клоном MS Office. Этот пакет задумывался и разрабатывался вокруг других идей, как нужно создавать документы. Центральная идея стилей, парадигма работы с базами данных, модель документов, API - всё это совершенно отличается от MS Office изначально. Без понимания этого попытка заменить одно другим как если бы Вы просто меняли версии одного продукта, неизбежно приведут к тому, что Вы описываете.

Цитата: aiva от 29 апреля 2022, 02:01начиная от полного непонимания экселевских макросов (хотя тот же VB не понимаю в чем проблема, но разберусь позже)

Что такое "тот же VB"? Даже в MS Office не VB, а VBA (это разные языки семейства Basic, хотя и родственные друг другу). А в OOo и потомках встроен StarBasic - ещё один язык семейства, который даже не родственник языкам от MS. И ещё в OOo есть режим совместимости с VBA - нечто, призванное обеспечить некоторую базовую совместимость - насколько это было реализовано (а было очень мало, и большей частью для Calc).

Цитата: aiva от 29 апреля 2022, 02:01но оно зачем-то файл создало.

Если только Вы не используете Mail Merge, работа с БД в OOo и потомках ведётся либо через (зарегистрированные) файлы ODB (описывающие соединение и другие метаданные типа макросов, запросов и форм), либо через динамические соединения из макросов. В случае Mail Merge есть ещё вариант "скрытой" ODB - встроенной в ODT.

Цитата: aiva от 29 апреля 2022, 02:01десятичный разделитель точка. в ОО я так не не победил эту запятую

Точка и запятая в качестве десятичных разделителей зависит прежде всего от локали программы (для России - запятая). Однако при правильной настройке пользователю не нужно стремиться к тому, чтобы у него печаталась точка: задача настройки локали программы - позволить программе понимать, когда пользователь пишет число, и какое это число. Например, в России пользователь печатает привычно для себя "1,234" - и программа должна понять, что речь об одной целой двухстах тридцати четырёх тысячных, а дальше уже дело настроенной БД - знать, как туда отправлять число, которое уже распознано.

Но в целом я Вам сочувствую. Я как-то занимался переводом и поддержкой ПО на предыдущем месте работы; я был тем самым одним из "адекватных людей", и я знаю, что грозит предприятию, где "организация зажала".
С уважением,
Михаил Каганский

aiva

Цитата: mikekaganski от 29 апреля 2022, 09:11Выполнить команду SQL непосредственно.
Так запрос работает, однако до сих пор не понятно как привязать к запросу условия по данным из ячейки CALCа. мне бы хотя бы просто пример, попытаюсь разобраться откуда ноги растут.
Цитата: mikekaganski от 29 апреля 2022, 09:11это разные языки семейства Basic
хех это я уже понял ) даже ключ совместимости не помогает. Похоже придется с нуля писать, либо в спешном порядке учить питон.
Цитата: mikekaganski от 29 апреля 2022, 09:11Точка и запятая в качестве десятичных разделителей зависит прежде всего от локали программы
вот тут вообще засада полная. если делать англ локаль (чтобы точка была разделителем), то он мне текстовые даты записывает как April March и тд., а если локаль РУ, то проклятая запятая, а в базу пишутся значения с точкой. поэтому даже если делать тестовый запрос вручную и данные все же подгружаются, ОО их не понимает.
Засада полная. И ведь не объяснишь, получаем ответ "вам за что деньги платят". Так что или делать или увольняться. 

economist

#4
Цитата: aiva от 29 апреля 2022, 15:34запрос работает, однако до сих пор не понятно как привязать к запросу условия по данным из ячейки CALCа

Это в MSO называется Параметрический запрос, и тут, в LO, он тоже возможен, как с появлением мини-диалогов на ввод условий, так и с использованием значений ячеек (но тут нужен макрос).

SELECT-запрос можно собрать из ячеек, списков Проверки данных, контролов итд, получить ResultSet, перебрать его и вывести в ячейки.

Но наиболее технологично заранее создать безразмерный Диапазон базы данных в Calc (перетянув на лист Таблицу/View/Запрос по Ctrl+Shift+F4) и "подменять" в нем SELECT-запрос на нужный. Суть и грабельки описаны тут: https://forumooo.ru/index.php/topic,8480.0/msg,57603.html - там инфы достаточно чтобы написать в Calc приложение к любой промышленной базе данных.

Дату лучше хранить "цифрами" в формате ISO ГГГГ-ММ-ДД и или как текст, но так же. Локаль, имхо, лучше вообще никогда не трогать.

Кавалерийским наскоком LibreOffice не взять, тут нужны месяцы, чтобы начать осознанно кодить копипастить. Ну и делиться опытом на Форуме тоже полезно: больше желающих и могущих помочь в поисках ответов на свои и чужие вопросы.  

На счет Python - это правильно, язык учится быстро и в LO он уже встроен. На Форуме немало примеров его использования. Обрабатывать данные векторными операциями или срезами из БД, скажем, в Python/Pandas, в его списках, множествах, IN-MEMORY датафреймах - гораздо быстрее и проще, чем делать это перебором/энумераторами в неуклюжих медленных массивах и структурах LO Basic или ячейках листов Calc. Хотя уметь надо всё.

А вот вывод финального результата - проще дооформить в Calc, если не нужен web-доступ и очень красивые графики (для этого у Python есть готовые либы с ReactJS основой).
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

eeigor

#5
OFFTOPIC
В StarBasic и Python используется разный стиль программирования. Я использую оба, свой для каждого языка.
Например:
Basic: GetData(), CamelCase; где скобки в отсутствие аргументов можно опустить.
Python: get_data(), snake_case; причём скобки означают вызов и именно с этой целью используются.
Но Python добавляет и массу других отличий и особенностей стиля (PEP 8 и пр.).

А в LibreOffice API: getData(), mixedCase

А вот как я сношу строку в Basic (точка переносится на вторую строку и сигнализирует о том, что строка неполная, отступ в 1 пробел):
 oMap = com.sun.star.container _
  .EnumerableMap.create("string", "string")
Сами понимаете, что в Python совсем другие правила.
Кроме того, мы тут активно используем Венгерскую нотацию (систему префиксов в именах, передающую тип), которая в Python не одобряется.

Как-то правил, исключительно для себя, очень полезный код от @JohnSUN (RefEdit реализация), который использовал global-переменную в отрицательном значении (Not в имени), но стиль требует "положительного" подхода, и я убрал отрицание и изменил соответствующим образом код. Считается, что это лучше для восприятия, хотя и субъективно. В общем, выработка своего стиля требует ещё больше времени, чем уходит на изучение языка. Но это очень важно!! И не просто.
...но начать лучше не с этого, а с освоения 10-ти пальцевого слепого метода печати. :)
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

aiva

Спасибо всем за ответы, для человека пришедшего с MS, ОО - это просто катастрофа и разрыв мозга. Не сомневаюсь, что в грамотных руках это мощнейший инструмент, но явно не в моих.
Еще огромный минус в том, что практически вся более-менее стоящая информация только на английском, мои познания в нем начались и закончились на "лондон из зе кепитал оф грейт бритн".
Буду "как-нибудь".. Ну или придется свою зарплату отдавать человеку, кто будет "как надо".

kompilainenn

Цитата: aiva от 29 апреля 2022, 02:01Помогите пожалуйста, нанять "адекватных" людей наша организация зажала, и свалили всё на обычных сотрудников.
так вы не администратор и не ИТшник в вашей компании?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

aiva

Цитата: kompilainenn от  1 мая 2022, 17:57так вы не администратор и не ИТшник в вашей компании?
Далеко нет :) но с IT связан. Не знаю даже как объяснить, навряд ли моя должность многое скажет :) Начальник геофизической партии (отдел сопровождения бурения). И да, Газпром. и да, жопят каждую копейку.