O LibreOffice Calc Macro não insere nova folha

0

Eu tenho uma planilha do LibreOffice Calc e usei a Macro de Registro para copiar a linha atual para uma nova planilha e transpor de colunas em linhas.

Eu atribuí a macro à tecla de atalho Ctrl + Deslocamento + A e tudo funciona, exceto que uma nova pasta não é inserida e a colar ocorre na folha atual que desastrosa.

Exemplo de folha principal com linha atual destacada:

Exemploderesultadoaocopiar,inserir,colaretranspormanualmente:

Macroatualquefalhaaoinserirnovasfolhasepastasnaplanilhaatual:

subViewRowInNewSheetrem----------------------------------------------------------------------remdefinevariablesdimdocumentasobjectdimdispatcherasobjectrem----------------------------------------------------------------------remgetaccesstothedocumentdocument=ThisComponent.CurrentController.Framedispatcher=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

NOTA: Ao inserir uma nova planilha, o padrão é inserir antes da planilha atual. Eu escolhi a opção para inserir a nova planilha após a planilha atual. Eu não acho que isso deva causar qualquer coisa.

O LibreOffice foi atualizado há algumas semanas automaticamente para a Versão 5.1.6.2 . Eu ficaria mais do que feliz em fazer o downgrade se isso corrigir o problema, mas esta é uma nova macro e nunca a testei antes da atualização.

    
por WinEunuuchs2Unix 06.03.2017 / 02:12

1 resposta

1

Esse código funcionou para mim usando o LibreOffice 5.3.0.3. No entanto, não funcionou usando o Apache OpenOffice 4.1.3. Então, parece ser um problema dependente da versão.

As chamadas de API do UNO geralmente são melhores do que as chamadas do distribuidor, conforme recomendado em uma pergunta semelhante aqui:

link

Portanto, se a planilha "Visualizar" ainda não foi criada:

oSheets = ThisComponent.Sheets
oSheets.insertNewByName("View",1)
    
por Jim K 06.03.2017 / 19:07