Копирование/вставка формулы в LibreOffice без изменения ячеек

Вопрос или проблема

У меня есть формула в Libreoffice Calc, которую я хотел бы перенести (вырезать и вставить) в другую ячейку. Я хотел бы, чтобы формула осталась точно такой же, без изменения ссылок на ячейки при перемещении. Я не могу использовать статическую ссылку (с использованием знака $), так как в другой ситуации мне нужно динамическое поведение ссылок.

Единственное решение, которое я нашел до сих пор, – это вручную скопировать и вставить текст формулы вместо самой ячейки. Но это работает только для одной ячейки, а не для нескольких.

Когда я в прошлом использовал функцию Вырезать и Вставить в Excel, она переносила формулу как есть. Копирование/вставка изменяет ссылки на ячейки. Я не использовал LibreOffice.

Хитрость:

  • Вырезать (ctrl + X)
  • Отменить (ctrl + Z)
  • Вставить (ctrl + V)

Так как “вырезать-вставить” работает, но не “копировать-вставить”, можно вырезать-вставить и использовать отмену, чтобы не стирать старые значения.

Проще, проще: я протестировал ответ Даниэля Мёллера, но он не сработал (по крайней мере, на MacOS), хотя он открыл мне путь к решению:
Вырезать и вставить, а затем вставить оригинал тоже.
Это решило проблему, без необходимости в макросах или сложных вещах.

Я думаю, что это решение проще и быстрее предыдущего:

  1. Выберите все ячейки, которые нужно скопировать
  2. Примените F4 столько раз, сколько нужно, чтобы сделать формулы абсолютными (добавляя $ во всех листах/столбцах/строках)
  3. Копировать (Ctrl + C)
  4. Вставить (Ctrl + V)
  5. (Необязательно) Примените 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: Использование функций «Копировать» и «Вставить»

  1. Выделите ячейку с формулой, которую хотите скопировать или переместить.
  2. Скопируйте формулу с помощью сочетания клавиш Ctrl + C.
  3. Вставьте формулу в нужное место с помощью сочетания клавиш Ctrl + V.

Этот способ, однако, приведет к изменению ссылок на ячейки, что может быть не нужно в вашем случае.

Способ 2: Использование сочетания клавиш "Вырезать" и "Отменить"

  1. Вырежьте ячейку с формулой, нажав Ctrl + X.
  2. Нажмите Ctrl + Z, чтобы отменить действие. Это вернёт формулу на прежнее место.
  3. Теперь вставьте формулу в нужное место, нажав Ctrl + V.

Этот метод работает, но имеет свои ограничения, так как может не всегда быть удобным, особенно если необходимо переместить несколько ячеек.

Способ 3: Создание макроса

Для более автоматизированного процесса вы можете создать макрос, который будет выполнять команду вырезания и вставки формулы, сохраняя при этом оригинальные ссылки на ячейки:

  1. Зайдите в меню ИнструментыМакросыРедактировать макросы.
  2. Создайте новый модуль и вставьте следующий код:
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
  1. После этого назначьте макрос на сочетание клавиш Ctrl + X через ИнструментыНастроить. Найдите Ctrl + X в разделе "Горячие клавиши", выберите макрос и нажмите «Изменить».

Теперь вы можете использовать сочетание Ctrl + X и Ctrl + V, чтобы вырезать и вставлять формулы без изменения ссылок на ячейки.

Способ 4: Временное преобразование формулы

Если хотите сохранить динамическое поведение формул, вы можете временно преобразовать формулы в абсолютные ссылки:

  1. Выделите ячейки с формулами.
  2. Нажмите клавишу F4 для преобразования в абсолютные ссылки.
  3. Скопируйте (Ctrl + C) и вставьте (Ctrl + V) формулы в новое место.
  4. Обратно преобразуйте формулы в относительные ссылки, нажав F4.

Заключение

Каждый из этих способов позволяет вам скопировать или вырезать формулы без изменения ссылок на ячейки. Выбор метода зависит от ваших предпочтений и количества формул, которые необходимо переместить. Использование макроса может значительно упростить процесс при частом выполнении таких операций.

Оцените материал
Добавить комментарий

Капча загружается...