Вопрос или проблема
У меня есть формула в Libreoffice Calc, которую я хотел бы перенести (вырезать и вставить) в другую ячейку. Я хотел бы, чтобы формула осталась точно такой же, без изменения ссылок на ячейки при перемещении. Я не могу использовать статическую ссылку (с использованием знака $), так как в другой ситуации мне нужно динамическое поведение ссылок.
Единственное решение, которое я нашел до сих пор, – это вручную скопировать и вставить текст формулы вместо самой ячейки. Но это работает только для одной ячейки, а не для нескольких.
Когда я в прошлом использовал функцию Вырезать и Вставить в Excel, она переносила формулу как есть. Копирование/вставка изменяет ссылки на ячейки. Я не использовал LibreOffice.
Хитрость:
- Вырезать (ctrl + X)
- Отменить (ctrl + Z)
- Вставить (ctrl + V)
Так как “вырезать-вставить” работает, но не “копировать-вставить”, можно вырезать-вставить и использовать отмену, чтобы не стирать старые значения.
Проще, проще: я протестировал ответ Даниэля Мёллера, но он не сработал (по крайней мере, на MacOS), хотя он открыл мне путь к решению:
Вырезать и вставить, а затем вставить оригинал тоже.
Это решило проблему, без необходимости в макросах или сложных вещах.
Я думаю, что это решение проще и быстрее предыдущего:
- Выберите все ячейки, которые нужно скопировать
- Примените F4 столько раз, сколько нужно, чтобы сделать формулы абсолютными (добавляя $ во всех листах/столбцах/строках)
- Копировать (Ctrl + C)
- Вставить (Ctrl + V)
- (Необязательно) Примените F4 к исходным и целевым ячейкам, чтобы сделать их снова относительными
Это тоже меня очень расстроило, поэтому я нашел обходное решение для этого:
Сначала создайте макрос, который имитирует вырезание, сначала копируя, а затем очищая ячейку:
Инструменты
-> Макросы
-> Редактировать макросы
-> Добавьте следующее в модуль (например, Модуль1
)
REM ***** BASIC *****
sub CutAndPaste
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())
end sub
Затем привяжите макрос к Ctrl + X
Инструменты
-> Настроить
-> найдите и выберите Ctrl+X
в Горячие клавиши
-> выберите Макросы LibreOffice / Мои макросы / Стандартный / Модуль1
в Категория
-> выберите CutAndPaste
в Функции -> нажмите Изменить
в правом верхнем углу, чтобы назначить макрос этому сочетанию клавиш.
Теперь вы можете Ctrl + X, Ctrl + V для вырезания и вставки, не изменяя ссылки на другие ячейки, указывающие на вырезанную ячейку.
Ни одно из существующих ответов не сработало для меня, когда я копировал/вырезал данные из импортированного CSV в другой лист. Мне пришлось вручную добавлять пустые строки и столбцы CSV, чтобы правильно расположить данные в другом листе. Затем копирование/вставка сработало.
Ответ или решение
Чтобы скопировать или вырезать формулу в LibreOffice Calc без изменения ссылок на ячейки, вы можете воспользоваться несколькими способами. Несмотря на то что процедуру можно выполнить вручную, есть также и более автоматизированные подходы, которые облегчают задачу.
Способ 1: Использование функций «Копировать» и «Вставить»
- Выделите ячейку с формулой, которую хотите скопировать или переместить.
- Скопируйте формулу с помощью сочетания клавиш
Ctrl + C
. - Вставьте формулу в нужное место с помощью сочетания клавиш
Ctrl + V
.
Этот способ, однако, приведет к изменению ссылок на ячейки, что может быть не нужно в вашем случае.
Способ 2: Использование сочетания клавиш "Вырезать" и "Отменить"
- Вырежьте ячейку с формулой, нажав
Ctrl + X
. - Нажмите
Ctrl + Z
, чтобы отменить действие. Это вернёт формулу на прежнее место. - Теперь вставьте формулу в нужное место, нажав
Ctrl + V
.
Этот метод работает, но имеет свои ограничения, так как может не всегда быть удобным, особенно если необходимо переместить несколько ячеек.
Способ 3: Создание макроса
Для более автоматизированного процесса вы можете создать макрос, который будет выполнять команду вырезания и вставки формулы, сохраняя при этом оригинальные ссылки на ячейки:
- Зайдите в меню Инструменты → Макросы → Редактировать макросы.
- Создайте новый модуль и вставьте следующий код:
REM ***** BASIC *****
sub CutAndPaste
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())
end sub
- После этого назначьте макрос на сочетание клавиш
Ctrl + X
через Инструменты → Настроить. НайдитеCtrl + X
в разделе "Горячие клавиши", выберите макрос и нажмите «Изменить».
Теперь вы можете использовать сочетание Ctrl + X
и Ctrl + V
, чтобы вырезать и вставлять формулы без изменения ссылок на ячейки.
Способ 4: Временное преобразование формулы
Если хотите сохранить динамическое поведение формул, вы можете временно преобразовать формулы в абсолютные ссылки:
- Выделите ячейки с формулами.
- Нажмите клавишу
F4
для преобразования в абсолютные ссылки. - Скопируйте (
Ctrl + C
) и вставьте (Ctrl + V
) формулы в новое место. - Обратно преобразуйте формулы в относительные ссылки, нажав
F4
.
Заключение
Каждый из этих способов позволяет вам скопировать или вырезать формулы без изменения ссылок на ячейки. Выбор метода зависит от ваших предпочтений и количества формул, которые необходимо переместить. Использование макроса может значительно упростить процесс при частом выполнении таких операций.