Я не уверен, есть ли способ "перемещать" строки с помощью клавиатуры, но использование c & p и вставка / удаление строк с помощью клавиатуры должны обеспечивать такую же функциональность:
- перейти к первой (самой левой) ячейке строки для перемещения;
- нажмите SHIFT+ПРОБЕЛ, чтобы выделить всю строку;
- нажмите CTRL+C, чтобы скопировать строку;
- нажмите CTRL+- чтобы удалить текущую строку;
- перейти к целевой строке;
- нажмите ALT+I, чтобы открыть меню «
Insert
;
- нажмите R, чтобы вставить новую строку (текущая строка сместится вниз);
- нажмите CTRL+V, чтобы вставить строку на новое место.
Поскольку операции вырезания и вставки иногда раздражают, вы можете создать простой макрос для вырезания ячеек и другой макрос для их вставки, перемещая существующее содержимое вниз.
Вот очень простой код для "перемещения" выделенных ячеек:
Option Explicit
Sub CopyAndCut
' ---------------------------------------------------------
' define variables
Dim document as object
Dim dispatcher as Object
Dim oSelections As Object
' ---------------------------------------------------------
' get access to the document and selections (if any)
document = ThisComponent.CurrentController.Frame
oSelections = ThisComponent.getCurrentSelection()
If IsNull(oSelections) Then Exit Sub
' ---------------------------------------------------------
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
' -------------------------------------------------------------
' Check the width of the selection - if 1024 columns, we assume
' the complete row was selected and should get deleted
If 1024 = oSelections.Columns.getCount() Then
dispatcher.executeDispatch(document, ".uno:DeleteRows", "", 0, Array())
End If
End Sub
Sub InsertWithMoveDown
' ---------------------------------------------------------
' define variables
Dim document as object
Dim dispatcher as object
' ---------------------------------------------------------
' get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
' ---------------------------------------------------------
' Paste contents with "Move Down" option
Dim args1(5) as New com.sun.star.beans.PropertyValue
args1(0).Name = "Flags"
args1(0).Value = "A"
args1(1).Name = "FormulaCommand"
args1(1).Value = 0
args1(2).Name = "SkipEmptyCells"
args1(2).Value = false
args1(3).Name = "Transpose"
args1(3).Value = false
args1(4).Name = "AsLink"
args1(4).Value = false
args1(5).Name = "MoveMode"
args1(5).Value = 0
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args1())
End Sub
Sub InsertWithMoveRight
' ---------------------------------------------------------
' define variables
Dim document as object
Dim dispatcher as object
' ---------------------------------------------------------
' get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
' ---------------------------------------------------------
' Paste contents with "Move Right" option
Dim args1(5) as New com.sun.star.beans.PropertyValue
args1(0).Name = "Flags"
args1(0).Value = "A"
args1(1).Name = "FormulaCommand"
args1(1).Value = 0
args1(2).Name = "SkipEmptyCells"
args1(2).Value = false
args1(3).Name = "Transpose"
args1(3).Value = false
args1(4).Name = "AsLink"
args1(4).Value = false
args1(5).Name = "MoveMode"
args1(5).Value = 1
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args1())
End Sub
После копирования кода в пользовательскую библиотеку просто назначьте CopyAndCut
, например, Alt+C , InsertWithMoveDown
, например, Alt+V , и InsertWithMoveRight
, например, Alt+R (все эти ярлыки по умолчанию пусты).
Теперь вы можете выделять ячейки или строки с помощью мыши или клавиатуры, вырезать их с помощью Alt+C, перемещаться к целевой ячейке и вставлять их с помощью Alt+V или Alt+R.