Функция похожа на 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