Структурные ссылки на диапазоны: за и против. Поделитесь мнением

Автор eeigor, 20 марта 2020, 14:24

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

eeigor

В Excel обращение к "умным" таблицам идет с использованием особого синтаксиса:
https://support.office.com/en-us/article/using-structured-references-with-excel-tables-f5ed2452-2337-4f71-bed3-c8ae6d2b276e

В LO такое тоже возможно, но только в XML формате (с поддержкой Excel). ODS формат их понимает, но после повторного открытия файла замещает абсолютными ссылками.
Однако, если обернуть их функцией ДВССЫЛ("Ссылка_как_строка"), то всё прекрасно работает: и в окне условного форматирования, и в окне проверки данных (Validation), и на листе.
Очень удобно, хотя в документации об этом ни слова.

На картинке внизу представлен аналогичных синтаксис для LO, правда по-английски. Но заменяя "This Row" на "Эта строка" (Local) и т.д., получаем работающий вариант.
Human readable, как говорится. Отлично работает с диапазонами базы данных.
Кто-то делает так же?

Вот как это выглядит (подсчитывает количество записей в диапазоне базы данных с именем "ИМЯ_БД", при условии, что поля с именами "ФИО" и "Дата" заполнены):
P.S. Строка ниже (у меня) почему-то не отображается полностью.
В теме "Как отсортировать диапазон, если есть формула массива в столбце?" есть файл с примером такой ссылки.

=СЧЁТЕСЛИМН(ДВССЫЛ("ИМЯ_БД[ФИО]");"<>";ДВССЫЛ("ИМЯ_БД[Дата]");"<>")
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

DrGarin

Спасибо большое за совет, а есть вариант добавить в формулу имя файла ods, из которого считываем диапазон?

sokol92

На мой взгляд, лучше не использовать недокументированные (?) возможности для структурированных ссылок.
Синтаксис для обычных ссылок Вы можете исследовать сами.
1. Открываем документ, на ячейки которого будем ссылаться, например C:\Temp\test.ods
2. Создаем новый документ. В ячейке A1 набираем "=", далее переходим на первый документ и дважды щелкаем по ячейке, на которую будем ссылаться, например лист "Sheet 1", ячейка A5.
3. Возвращаемся на второй документ, нажимаем Enter и видим ссылку в ячейке A1:
='file:///C:/Temp/test.ods'#$'Sheet 1'.A5
Владимир.

DrGarin

Спасибо большое, Владимир, вот что интересно - для обычных ссылок, действительно, работает. Но мне надо обращаться к столбцам таблицы данных во внешнем файле по имени столбца. И , честно, сломал мозг.

sokol92

Поясните, пожалуйста, суть проблемы.
Если, к примеру, нужно просуммировать ячейки первого столбца другой книги, то можно написать так:

=SUM('file:///C:/Temp/test.ods'#$'Sheet 1'.A1:A999)
(или СУММ, если установлены русскоязычные имена функций).
Номер строки в ссылке A999 взят с "запасом" на будущее расширение.

Кстати, в Excel "cтруктурированные ссылки на имена таблиц и столбцов в связанных книгах не поддерживаются".
Владимир.