Como faço para vincular a um intervalo nomeado externo sem DDE no LibreOffice Calc

0

Desejo adicionar um total de uma pasta de trabalho a outra sem usar DDE, pois isso está ficando obsoleto e está me causando problemas. O total está em uma única célula com um nome de intervalo. Ambas as pastas de trabalho estão no mesmo diretório.

Se eu tentar inserir | Vincule ou arraste o nome do intervalo da planilha de origem usando o navegador, insira o conteúdo da célula, caractere para caractere. Esta é uma fórmula, que fornece o resultado desejado na planilha de origem, mas é totalmente sem sentido no destino.

Se eu digitar "=" na barra de ferramentas de conteúdo da célula, clique na célula no documento de origem, isso funciona bem, mas insere a referência de célula bruta em vez de seu nome de intervalo ='file:///home/simon/Home/Files/Accounts/Peracs14-15.ods'#$Journal.F412 . Se eu tentar substituir a referência de célula pelo nome do intervalo ='file:///home/simon/Home/Files/Accounts/Peracs14-15.ods'#Journal.Number20 , ele produzirá um erro #NAME . Se eu inserir o nome do intervalo por conta própria, ='file:///home/simon/Home/Files/Accounts/Peracs14-15.ods'#Number20 pressionando [Enter] fará com que o conteúdo da célula mude para ='file:///home/simon/Home/Files/Accounts/Peracs14-15.ods'#file:///home/simon/Home/Files/Accounts/Peracs14-15.ods , o que é bizarro. O caminho original ainda está lá, mas o nome do intervalo foi substituído pelo caminho para o arquivo sem o nome do intervalo, de forma que o nome do intervalo tenha desaparecido. Isso acontece se o "preenchimento automático" está ativado ou desativado. Meu pobre computador antigo ainda é assombrado pelo clipe de Bill Gates?

Como eu preciso criar uma nova planilha em cada final de período, seria muito trabalhoso inserir novamente todas essas referências com as referências de célula corretas. Eu sei que estou sentindo falta de algo óbvio, alguém pode me ajudar?

Plataforma - Linux Mint 17.3 com xfce, baseado no Ubuntu 14.04. GUI - Aplicação xfce V4.10 - LibreOffice Versão: 5.0.3.2

    
por Gannet 30.06.2016 / 19:04

1 resposta

1

Em link :

=’file:///Path & File Name’#$SheetName.CellName.

Eu deduzo disso que não há como incluir um intervalo nomeado como parte da referência. No entanto, existem várias coisas que podem ser feitas com macros. Uma ideia que eu tive usa o seguinte código:

Sub GetExternalNamedRanges
    Dim rangeNames As New Collection
    Dim namedRanges As New Collection
    oSheet = ThisComponent.Sheets.getByName("External Ranges")
    column = 1
    Do
        filepath = oSheet.GetCellByPosition(column,0).getString()
        If filepath = "" Then
            Exit Do
        End If
        otherComponent = StarDesktop.loadComponentFromUrl( _
            filepath, "_default", 0, Array())
        oRanges = otherComponent.NamedRanges
        namedRanges.Add(oRanges)
        For Each oRange In oRanges
            rangeName = oRange.getName()
            If Not Contains(rangeNames, rangeName) Then
                'rangeNames.Add(oRange.getContent(), oRange.getContent())
                rangeNames.Add(rangeName, rangeName)
            End If
        Next
        column = column + 1
    Loop
    row = 1
    For Each rangeName In rangeNames
        column = 0  'column A
        oCell = oSheet.GetCellByPosition(column,row)
        oCell.setString(rangeName)
        'oCell.setString(oRange.getName())
        For Each namedRange In namedRanges
            column = column + 1
            If namedRange.hasByName(rangeName) Then
                oRange = namedRange.getByName(rangeName)
                oCell = oSheet.GetCellByPosition(column,row)
                oCell.setString(oRange.getContent())
            End If
        Next
        row = row + 1
    Next
End Sub

' Returns True if the collection contains the key, otherwise False.
Function Contains(coll As Collection, key As Variant)
    On Error Goto ErrorHandler
    coll.Item(key)
    Contains = True
    Exit Function
ErrorHandler:
    If Err <> 5 Then
         MsgBox "Error " & Err & ": " & Error$ & " (line : " & Erl & ")"
    End If
    Contains = False
End Function

Para usar isso, crie uma planilha no documento principal chamada "External Ranges". Na célula, digite "nome do arquivo". Na célula B1, insira o caminho para o primeiro arquivo que precisa ser referenciado, começando com "file: ///". Na célula C1, insira o segundo arquivo, se houver, e D1, etc., se houver mais arquivos.

Agora, execute a macro, que extrairá os locais de todos os intervalos nomeados nesses documentos. O resultado é assim:

Emseguida,useessesintervaloscomVLOOKUP:

=INDIRECT("'" & VLOOKUP("filename", NamedRangesList, 2) & "'#" & VLOOKUP("animal", NamedRangesList, 2))

Isso atrairá o valor do intervalo chamado "animal" (que está localizado em $ Sheet1. $ C $ 2 neste exemplo) do primeiro arquivo.

Esta fórmula usando INDIRECT é bastante complicada, mas pode ser reduzida criando uma função básica. A função poderia levar apenas o número do arquivo e o nome do intervalo como argumentos e executaria o INDIRECT e VLOOKUP work.

    
por 01.07.2016 / 01:23