Макрос LibreOffice Calc не вставляет новый лист

Я имею электронную таблицу LibreOffice Calc и использовал Рекордную Макро-функцию, чтобы скопировать текущую строку в новый лист и транспонировать от столбцов до строк.

Я присвоил макрос сочетанию клавиш Ctrl+Shift+A, и все работает кроме нового листа, не вставляется, и вставка происходит в текущем листе который имеющий катастрофические последствия.

Образец основного листа с текущей выделенной строкой:

IG Main

Образец результата, когда вручную копируют, вставьте лист, вставка транспонируют и формат:

IG View

Текущий макрос, которому не удается вставить новый лист и вставки в текущий лист:

sub ViewRowInNewSheet
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Sel"
args1(0).Value = false

dispatcher.executeDispatch(document, ".uno:GoToStartOfRow", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Sel"
args2(0).Value = true

dispatcher.executeDispatch(document, ".uno:GoToEndOfRow", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
'dim args4(1) as new com.sun.star.beans.PropertyValue
'args4(0).Name = "Name"
'args4(0).Value = "View"
'args4(1).Name = "Index"
'args4(1).Value = 4

'dispatcher.executeDispatch(document, ".uno:Insert", "", 0, args4())
'
' Replacement Code from Ask Ubuntu March 6/2017 :
oSheets = ThisComponent.Sheets
oSheets.insertNewByName("View",1)

rem ----------------------------------------------------------------------
dim args5(5) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "SVD"
args5(1).Name = "FormulaCommand"
args5(1).Value = 0
args5(2).Name = "SkipEmptyCells"
args5(2).Value = false
args5(3).Name = "Transpose"
args5(3).Value = true
args5(4).Name = "AsLink"
args5(4).Value = false
args5(5).Name = "MoveMode"
args5(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())

rem ----------------------------------------------------------------------
dim args7(2) as new com.sun.star.beans.PropertyValue
args7(0).Name = "FontHeight.Height"
args7(0).Value = 15
args7(1).Name = "FontHeight.Prop"
args7(1).Value = 100
args7(2).Name = "FontHeight.Diff"
args7(2).Value = 0

dispatcher.executeDispatch(document, ".uno:FontHeight", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "By"
args8(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoDownSel", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "By"
args9(0).Value = 1

dispatcher.executeDispatch(document, ".uno:GoDownSel", "", 0, args9())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DeleteRows", "", 0, Array())

rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "ToPoint"
args11(0).Value = "$A$3"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args11())

rem ----------------------------------------------------------------------
dim args12(0) as new com.sun.star.beans.PropertyValue
args12(0).Name = "Sel"
args12(0).Value = true

dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args12())

rem ----------------------------------------------------------------------
dim args13(4) as new com.sun.star.beans.PropertyValue
args13(0).Name = "CharFontName.StyleName"
args13(0).Value = ""
args13(1).Name = "CharFontName.Pitch"
args13(1).Value = 1
args13(2).Name = "CharFontName.CharSet"
args13(2).Value = -1
args13(3).Name = "CharFontName.Family"
args13(3).Value = 0
args13(4).Name = "CharFontName.FamilyName"
args13(4).Value = "Andale Mono"

dispatcher.executeDispatch(document, ".uno:CharFontName", "", 0, args13())

rem ----------------------------------------------------------------------
dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "ToPoint"
args14(0).Value = "$A$3"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args14())


end sub

Примечание: При вставке нового листа значение по умолчанию должно вставить перед текущим листом. Я выбрал опцию вставить новый лист после текущего листа. Я не думаю, что это должно произвести что-либо все же.

LibreOffice был обновлен несколько недель назад автоматически к Версии 5.1.6.2. Я был бы более, чем рад понизить, если это решает проблему, но это - новый макрос, и я никогда не пробовал ее перед обновлением.

0
задан 6 March 2017 в 18:11

1 ответ

Этот код работал на меня использующий LibreOffice 5.3.0.3. Однако это не работало с помощью Apache OpenOffice 4.1.3. Таким образом, это, кажется, зависимая от версии проблема.

вызовы API ООН обычно лучше, чем вызовы диспетчера, как рекомендуется в подобном вопросе здесь:

https://forum.openoffice.org/en/forum/viewtopic.php? f=25& t=26612

Поэтому, если лист "Представления" еще не был создан:

oSheets = ThisComponent.Sheets
oSheets.insertNewByName("View",1)
1
ответ дан 3 November 2019 в 16:23

Другие вопросы по тегам:

Похожие вопросы: