Функция похожа на importxml в Excel?

Я люблю использовать Google Docs function =importxml(), но хотел бы знать, было ли что-то подобное в Excel 2010? Я не могу найти способ для программы автоматически извлекать данные из связанного файла XML.

Например, я хотел бы иметь возможность установить столбец с заголовком "Имя элемента", а затем добавить в следующий столбец введенное пользователем имя элемента из предыдущего столбца к этому URL.

http://util.eveuniversity.org/xml/itemLookup.php?name=

а затем проанализируйте полученный XML-файл, чтобы получить идентификатор типа. Это выполняется в Google Документах с помощью

=importxml(concatenate("http://util.eveuniversity.org/xml/itemLookup.php?name=",A3);"//itemLookup/typeID")

A3 - это столбец с именем элемента, который в данном случае будет Tritanium, и импортирует данные из полученного XML-файла.

http://util.eveuniversity.org/xml/itemLookup.php?name=Tritanium

который возвращает значение 34.

У меня есть список из примерно 20 названий элементов, которые Google docs автоматически обновляет при каждом открытии файла. Есть ли способ для Excel 2010 для репликации этой функции?

Спасибо!

Будет

4 ответа

Решение

Вам нужно будет написать свой собственный UDF.

Одним из способов было бы использовать MSXML2 библиотека, что-то вроде этого:

Function GetData(sName As String, sItem As String, Optional sURL = "") As Variant
    Dim oHttp As New MSXML2.XMLHTTP60
    Dim xmlResp As MSXML2.DOMDocument60
    Dim result As Variant
    On Error GoTo EH

    If sURL = "" Then
        sURL = "http://util.eveuniversity.org/xml/itemLookup.php?name="
    End If

    'open the request and send it
    oHttp.Open "GET", sURL & sName, False
    oHttp.Send

    'get the response as xml
    Set xmlResp = oHttp.responseXML
    ' get Item
    GetData = xmlResp.getElementsByTagName(sItem).Item(0).Text

    ' Examine output of these in the Immediate window
    Debug.Print sName
    Debug.Print xmlResp.XML

CleanUp:
    On Error Resume Next
    Set xmlResp = Nothing
    Set oHttp = Nothing
Exit Function
EH:
    GetData = CVErr(xlErrValue)
    GoTo CleanUp
End Function

Назовите это так (где A5 содержит необходимые typeName)

=GetData(A5, "typeID")

Вопрос с 2013 года, прошло некоторое время...

В Excel 2013 есть функция WEBSERVICE для загрузки документов XML, которая будет делать именно то, что вы хотите.

Существует также FILTERXML для поиска загруженного XML-документа с использованием XPath.

Function ImportXML(url As String, query As String)

    Dim document    As MSXML2.DOMDocument60
    Dim http        As New MSXML2.XMLHTTP60

    http.Open "GET", url, False
    http.send

    Set document = http.responseXML

    ImportXML = document.SelectSingleNode(query).nodeTypedValue

End Function

Функция "Из Интернета" в меню "Данные" перетаскивает онлайн-данные прямо в электронную таблицу. Импорт данных XML также доступен в подменю "Из других источников", которое также указано в меню данных.

Созданные соединения управляются через диалоговое окно "Соединения" в меню "Данные".

Пример кода с использованием макросов записей при создании соединения "Из Интернета":

Sub Macro1()
' Macro1 Macro
With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://en.wikipedia.org/wiki/Microsoft_Excel" _
        , Destination:=Range("$A$1"))
        .Name = _
        "?affID=110195&tt=270912_7a_3912_6&babsrc=HP_ss&mntrId=3e2fc48700000000000088532eb428ec"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub
Другие вопросы по тегам