Несколько файлов таблиц ods (EmbeddedDatabase) для полей слияния

Автор meat_12237, 30 января 2025, 09:36

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

meat_12237

Возможно ли в актуальной версии офиса использовать 2 файла таблиц ods для полей слияния? Возможно ли, чтобы один файл ods использовался для одной группы полей слияния, другой - для другой группы полей слияния ?

Предистория:

Имеется файл, созданный в ранней версии офиса, который для полей слияния использует 2 отдельных файла таблиц ods. В ранних версиях офиса для каждого файла таблиц ods, используемого для полей слияния, создавался файл базы данных odb где-то в папке "Мои документы".

Сейчас, как я понял, файл таблиц ods обзывается, как EmbeddedDatabase, и в файл odt добавляется ссылка на этот файл таблиц. При этом файл базы данных не создается.

Похоже, что в актуальной версии офиса возможно существование только одной EmbeddedDatabase: я не могу подключить второй файл таблиц ods, я не могу создать новый документ и использовать 2 файла таблиц ods для полей слияния. Может быть, для того, чтобы использовать 2 файла таблиц ods, мне необходимо установить Java, например, для работы Base ? Тогда как включить механизм, который использовался в ранних версиях ?

mikekaganski

Сейчас нет возможности делать две встроенные БД. Однако использовать внешний ODB всё так же возможно. Либо "прикрепляйте" таблицы до того как сохраните (дадите имя) ODT, либо создавайте ODB отдельно, а потом уж прикрепляйте его.
С уважением,
Михаил Каганский

meat_12237

Подтверждаю способ mikekaganski (прикрепление до сохранения). При этом в папке "Мои документы" создаются файлы odb. Даже без установленной Java.

Как я понял, эти файлы odb являются ссылками на файлы таблиц ods.

Каким способом создать такие odb файлы-ссылки ?

mikekaganski

ODB - это файлы Base. И если надо создать отдельно, то они создаются именно там.
С уважением,
Михаил Каганский

meat_12237

Способ 1:
1) Открыть Writer. Документ не сохранять.
2) Создать поля слияния с необходимыми таблицами. Соответствующие файлы odb создадутся в папке "Мои документы".
3) В дальнейшем, обращаться к этим odb файлам.

Способ 2:
1) Запустить Base. Java в данном случае обязательна.
2) Выбрать "Соединиться с существующей базой данных".
3) Выбрать в выпадающем списке "Электронная таблица". Нажать "Далее".
4) Выбрать файл электронной таблицы. Нажать "Далее".
5) Выбрать "Да, зарегистрировать базу данных". В дальнейшем, обращаться к зарегистрированным подобным образом базам.

mikekaganski, спасибо!

mikekaganski

Цитата: meat_12237 от 31 января 2025, 11:21Запустить Base. Java в данном случае обязательна

Почему??? Конечно нет. Java могла бы быть нужна только если Вы пользуетесь HSQLDB (а Вы не пользуетесь ей - Вы создаёте соединение с Calc), либо если Вы пользуетесь построителем отчётов (а Вы не пользуетесь им).
С уважением,
Михаил Каганский

economist

Слияние (Данные в Поля) из разных БД в одном ODT - возможно из коробки.

Рассылка - нет, но были расширения, работавшие со скрипом.

Возможно сработает Select ... From sheet1 Union all select ... From sheet2 и слияние по этому "бутерброду", но не особо верится, да и требования по одинаковости таблиц слишком строгие.

А ещё можно в Calc написать ссылки формулами на другие Книги (и ещё +3 способа отражать данные из таблицы в др. таблице). И тогда Рассылка де-факто пройдет по данным из нескольких таблиц, но из одной.

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

meat_12237

Цитата: economist от  2 февраля 2025, 10:14и ещё +3 способа отражать данные из таблицы в др. таблице

Расскажите, пожалуйста, о них.

economist

#8
Данные других таблиц можно затащить разными путями:

1) Ctrl+Shift+F4 c выбором базы данных, подключенных к XLS/ODS/CSV/TXT-файлу или ODT c таблицей или адресной книгой ThunderBird.

2) Лист - Вставить лист ...   

3) Лист - Вставить лист из файла

4) Лист - Внешние связи ...

Для Рассылки (т.е. для авто-создания нескольких ODT/PDF/email-документов по таблице) - часто нужно делать под-выборку из таблицы, полученной в п. 1-4. Фильтры в Ctrl+Shift+F4 мощны, но одноразовы, а Рассылки намекают на повторяемость. Для этого лучше на языке SQL создать Запрос или Представление таблицы, и по ним уже сделать Рассылку. Также можно использовать Мастер в Base (JAVA), но SQL для этого лучше, т.к. Мастер - тоже штука одноразовая. В SQL-редакторе можно всегда добиться нужного небольшими шажками и сделать то, чего Мастер не умеет.

К таким таблицам в Calc тоже можно подключиться как к базе данных, но для их обновления придется их всё же открыть. Это не очень похоже на промышленное решение, к тому же хирургия строк формулами в Calc или на SQL хоть и доступна, но довольно трудна. При работе с TXT/CSV/XLX*/ODS доступен не весь набор SQL-функций, см. https://www.openoffice.org/dba/specifications/file_based_functions.html#functional Если в ячейках будут пустоты и ошибки - это сильно усложнит процесс Слияния и будет порождать интересные глюки. Использовать "фишки" типа Условный/Скрытый текст/абзац на основе значений слияния - можно, но гибкости там нет.   

Поэтому лучше взять Python c Pandas - он играючи соединит, не открывая, несколько разных таблиц даже из разных источников данных - файловых, ODBC/JDBC, web API - короче вообще любых, с pd.merge() или командами на том же SQL, примеры кода есть на Форуме. В конце Python охранит результат в отдельный "рассылочный" TXT, где будут готовы и суммы прописью, и падежи, красиво отформатированные числа (в Рассылках форматы м.б. проблемой), и нечто разумное вместо пустых значений, свежие кадровые данные итд (т.е. не нужно будет фильтровать и SQL-ить строки).

Остается один раз открыть любой док (шаблон письма, заявления, приказа, договора), нажать Ctrl+Shift+F4, перетащить имена полей в текст и запустить Рассылку. Или нажать на Данные в Поля для заполнения единичного дока. Файл с полями БД станет "шаблоном", который легко перезаполнить новыми единичными или серийными данными спустя месяцы. При этом прослойка в виде SQL-запроса просто категорически нужна, ведь она легко адаптируема при смене заголовков столбцов, вставке строк итп шалостям в исходных таблицах (но на Python адаптация еще проще).

Одним словом, хотите кайфовать от слияния - используйте SQL-прослойку или даже Python+Pandas, это промышленное, но при этом максимально простое в освоении решение.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...