Выделение нескольких несвязных диапазонов и вставка…

Автор eeigor, 25 ноября 2020, 21:42

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

eeigor

Выделенный диапазон содержит скрытые строки/столбцы.
Необходимо выделить только видимые ячейки.

oRanges = ThisComponent.CurrentSelection.queryVisibleCells()
ThisComponent.CurrentController.select(oRanges)  '??

Так не работает, а в цикле выделяется только последний диапазон.
Как выделить несколько полученных диапазонов?

Не знаю: зд. как бы работает https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=101202&hilit=How+to+select+multiple+ranges
но у меня нет...

UPD:
Есть ли разница в этих (на скриншотах) выделениях? Подсветка цветом - это не фон ячеек, а результат выделения мышью.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

В примере oRanges формируется правильно. В этом можно убедиться, проанализировав свойство AbsoluteName. С выделением, как обычно, проблемы. Правда, выделение нужно редко (как и в Excel).
Владимир.

eeigor

#2
Цитата: sokol92 от 25 ноября 2020, 23:06Правда, выделение нужно редко (как и в Excel)
Нужно именно потому, что в Excel это реализовано (см. скриншот). И мне надо выделить только видимые ячейки, то есть выделение вручную диапазона, содержащего скрытые строки, нужно свести к выделению только видимых ячеек, поскольку эта функция в Calc отсутствует.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

А Вы продолжите свой пример:

Sub TestSelection3
  Dim oRanges
  oRanges = ThisComponent.CurrentSelection.queryVisibleCells()
  Msgbox oRanges.AbsoluteName
  ThisComponent.CurrentController.select(oRanges)
  Msgbox ThisComponent.CurrentSelection.AbsoluteName
End Sub


То же, что делает интерактивная часть (правда, с визуализацией, как я написал, проблемы).
Владимир.

eeigor

Цитата: sokol92 от 25 ноября 2020, 23:19с визуализацией, как я написал, проблемы
Вроде, как да. Только это очень неудобно. Даже не знаю, что и сказать. Спасибо за подсказку.
Тему надо продолжить...
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#5
Ещё одна засада. Решение задачи выделения только видимых ячеек нужно для того, чтобы в них что-то вставить (например формулу с относительной адресацией), но это невозможно (см. скриншот). В Excel это работает.

LO Calc не работает с множественным выделением, или я что-то делаю не так?
Я про ввод данных в несколько ячеек сразу: Ctrl+Enter в Excel   и   Alt+Enter в LO Calc.

UPD: Сообщение переведено неточно (Insert into multiple selection not possible.)
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#6
А как выделить только пустые ячейки? Тоже частая задача: когда данные имеют структуру, где повторяющиеся данные в столбце опущены (присутствуют только заголовки разделов). Для анализа такого диапазона в сводной таблице требуется заполнить "пустоты". Вручную долго. Надо выделить столбец, а затем оставить только пустые ячейки в выделенном столбце, потом ввести формулу в первую ячейку (относительную ссылку на вышележащую ячейку), распространить эту формулу на все выделенные ячейки (Alt+Enter), и все пустоты заполнятся своими данными.

Такие макросы есть у кого-н.?
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#7
Предварительный "диагноз" такой:
Calc не позволяет выделить только пустые ячейки или только видимые ячейки, а если выделить их макросом, то возникают проблемы с отображением (!) выделения множественных диапазонов, то есть <ThisComponent.CurrentController.select(oRanges)> работает, но не отображает выделение на листе. Далее, в полученные диапазоны не удаётся ввести данные одновременно нажатием Alt+Enter (сообщение выше: "Невозможно вставить множественное выделение").

Ещё раз поясню.
"Пустоты" появляются, когда данные на листе представлены в виде структуры (наглядно и нет избыточных (дублирующих) данных, но нарушается принцип организации данных: вся информация об объекте должна лежать в одной записи). Такие "пустоты" надо быстро заполнять, с опорой "на значения выше".
Ссылка (способ 1): https://www.planetaexcel.ru/techniques/2/96/
Потребность в заполнении недостающих данных в только видимые ячейки возникает, к примеру, когда данные обработаны функцией "Промежуточные итоги" (Subtotals), и в итоговых строках надо в отдельные ячейки что-то добавить из исходных данных (такое случается). В конце концов, иногда надо выделить только видимые ячейки (те же промежуточные итоги), чтобы иначе их отформатировать явно (не явно - это с использованием УФ).

В Ubuntu 18.04 LTS (если дело только в ОС) функция "Данные/Промежуточные итоги..." не работает: открывается "неуправляемая" безразмерная форма (см. скриншот), которую можно только закрыть клавишей Esc.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

Владимир.

eeigor

#9
Цитата: sokol92 от 26 ноября 2020, 13:01Метод queryEmptyCells
Да, я это знаю. Вот только что делать потом с несвязным выделением, если надо разом вставить одну и ту же относительную формулу (Alt+Enter).
Советуют пометить эти ячейки уникальным образом, а потом через поиск и замену вставить нужную формулу.
А надо сделать так: https://www.planetaexcel.ru/techniques/2/96/  (способ 1)

UPD:
Вероятно, это д. б. макрос, который из выделенного диапазона получит пустые ячейки, предоставит возможность ввести новое значение и вставит его в выделенные ячейки... При этом работать надо вслепую, ибо есть проблемы с отображением выделения.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#10
Заполнение "пустот".
Решение 1:
1. Выбираем в Параметрах синтаксис формулы Excel R1C1.
2. Выделяем требуемый диапазон и заполняем пустые ячейки уникальным символом, например @.
3. Заменяем @ на относительную формулу (см. скриншот).
4. Заменяем формулы на данные.

Установки: ячейка целиком в только текущем выделении.

Синтаксис формулы можно не менять (скриншот 2).

Решение 2:
Скриншот 3. Дополнительный столбец удалить.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#11
Цитата: sokol92 от 25 ноября 2020, 23:19правда, с визуализацией, как я написал, проблемы
Разместил пост на англоязычном форуме.
Ответ:
"If I have the spreadsheet not the code, as the active display and I use the menu Tools -> Marcos -> Run Macro to run the procedure Dummy, the selected region gets highlighted".

Щелчок в области кнопок выбора строки, когда курсор находится над номером скрытой строки и выглядит как двунаправленная стрелка, восстанавливает выделение, а отображение скрытой строки показывает, что она не выбрана, что и требовалось (queryVisibleCells).
Но выбор теряется при запуске макроса из IDE при множественном выделении.
Действительно, проблема с "активным дисплеем". Это не столь принципиально. Задача решена. Но в целях отладки кода из IDE было бы неплохо заставлять дисплей "просыпаться".
Как это сделать, кто знает?! Метод unlockControllers() здесь уступает свойству ScreenUpdating и методу DoEvents.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community