Я хочу перенести общее количество из одной книги в другую без использования DDE, поскольку это устарело и вызывает у меня проблемы. Итог находится в одной ячейке с именем диапазона. Обе книги находятся в одном каталоге.

Если я попробую вставить | Ссылка или перетаскивание имени диапазона из исходного листа с помощью навигатора, он вставляет содержимое ячейки, символ за символом. Это формула, которая дает требуемый результат в исходном листе, но совершенно бессмысленна в пункте назначения.

Если я набираю «=» на панели инструментов содержимого ячейки, затем нажимаю на ячейку в исходном документе, это работает нормально, но вставляет ссылку на ячейку в необработанном виде, а не с диапазоном name ='file:///home/simon/Home/Files/Accounts/Peracs14-15.ods'#$Journal.F412 . Если я пытаюсь заменить ссылку на ячейку на диапазон name ='file:///home/simon/Home/Files/Accounts/Peracs14-15.ods'#Journal.Number20 , выдается ошибка #NAME . Если я ввожу имя диапазона отдельно ='file:///home/simon/Home/Files/Accounts/Peracs14-15.ods'#Number20 нажатие [Enter] вызывает изменение содержимого ячейки на ='file:///home/simon/Home/Files/Accounts/Peracs14-15.ods'#file:///home/simon/Home/Files/Accounts/Peracs14-15.ods , что странно. Исходный путь все еще там, но имя диапазона было заменено на путь к файлу без имени диапазона, так что имя диапазона исчезло. Это происходит независимо от того, включено ли автозаполнение. Мой скучный старый компьютер все еще преследуется скрепкой Билла Гейтса?

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

Платформа - Linux Mint 17.3 с xfce, основанная на Ubuntu 14.04. GUI - Приложение xfce V4.10 - LibreOffice Версия: 5.0.3.2

1 ответ1

1

Из https://wiki.openoffice.org/wiki/Documentation/OOo3_User_Guides/Calc_Guide/Referencing_other_documents:

= 'file:/// Путь и имя файла' # $ SheetName.CellName.

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

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

Чтобы использовать это, создайте лист в главном документе под названием "Внешние диапазоны". В ячейке A1 введите "имя файла". В ячейке B1 введите путь к первому файлу, на который нужно сослаться, начиная с «file:///». В ячейку C1 введите второй файл, если он есть, и D1 и т.д., Если есть еще файлы.

Теперь запустите макрос, который будет тянуть в местах всех именованных диапазонов в этих документах. Результат выглядит так:

Внешние Диапазоны

Затем используйте эти диапазоны с VLOOKUP:

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

Это приведет к значению диапазона с именем "animal" (который находится в $ Sheet1.$ C $ 2 в этом примере) из первого файла.

Эта формула, использующая INDIRECT становится довольно сложной, но ее можно сократить, создав функцию Basic. Функция может просто взять номер файла и имя диапазона в качестве аргументов, и она будет выполнять работу INDIRECT и VLOOKUP .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .