Aplique a soma do LibreOffice a várias planilhas renomeadas

2

Eu tenho uma planilha com muitas folhas, cada uma rastreando um determinado tópico. Dentro de cada folha, há colunas de dados brutos e uma célula (sempre em F1) que contém uma estatística calculada para os dados brutos.

Eu adicionarei novas planilhas com alguma regularidade.

Gostaria também de ter uma planilha "Resumo", que, digamos, SUM dessa estatística em F1 de todas as outras planilhas. Eu sei que posso especificar manualmente as folhas como

SUM(FirstSheetName.F1;AnotherName.F1;...)

mas isso exigirá a manutenção manual desse campo toda vez que uma nova planilha for adicionada, o que suponho que me esquecerei de fazer. Existe uma maneira de especificar uma fórmula para aplicar, digamos, um glob ou algo parecido, aos nomes das planilhas, para que eu pudesse fazer algo mais como SUM(*.F1)

    
por Eric Renouf 28.06.2016 / 17:04

1 resposta

3

Você pode resolver isso usando duas macros pequenas (para determinar o nome da última planilha) em combinação com o operador de intervalo e o INDIRECT() função.

Primeiro, crie a macro a seguir ( Tools - > Macros - > LibreOffice Basic , crie um novo módulo ou use o módulo padrão; cole o seguinte código):

Function LastSheetName()
    Dim nSheetCount As Integer
    nSheetCount = ThisComponent.getSheets().Count
    LastSheetName = ThisComponent.getSheets().getByIndex(nSheetCount - 1).getName()
End Function

Function LastSheetCell(sCell)
    LastSheetCell = LastSheetName() & "." & sCell ' notice: sheet/cell separator may be "!"
End Function

Aviso: dependendo das suas configurações de localização, talvez seja necessário substituir o ponto . na função LastSheetCell() por um ponto de exclamação:

LastSheetCell = LastSheetName() & "!" & sCell

Com essa macro definida, você pode definir essas funções definidas pelo usuário em sua planilha:

=LASTSHEETNAME()               ' returns e.g. "Sheet10" as String
=LASTSHEETCELL("F1")           ' returns e.g. "Sheet10.F1" as String
=INDIRECT(LASTSHEETCELL("F1")) ' returns a cell reference to "Sheet10.F1"

Agora, você tem todos os componentes necessários para criar a fórmula final:

=SUM(FirstSheetName.F1:INDIRECT(LASTSHEETCELL("F1"))) ' returns the sum of FirstSheetName.F1; ...; LastSheetName.F1

Observe o : entre FirstSheetName.F1 e a fórmula que cria a referência à célula da última planilha: essa é a operador de intervalo . Você pode usá-lo para referenciar um intervalo de folhas também. Dos documentos do OOo Calc:

Sheet1.A3:Sheet3.D4: Reference to a cuboid range with 24 cells, 4 column width × 2 row height × 3 sheets depth.

    
por 28.06.2016 / 18:56