Вопрос:
Мне нравится использовать функцию Документов Google = importxml(), но хотелось бы знать, было ли что-то подобное в Excel 2010? Кажется, я не могу найти способ автоматически вытащить данные из связанного файла XML.
Например, мне бы хотелось создать столбец с заголовком “Имя элемента”, а затем следующий столбец добавить имя, введенное пользователем в предыдущем столбце, на этот URL
а затем проанализируйте полученный XML файл, чтобы вернуть идентификатор типа. Это выполняется в документах google, используя
=importxml(concatenate(«http://util.eveuniversity.org/xml/itemLookup.php?name=»,A3);»//itemLookup/typeID»)
A3 – это столбец с именем элемента, который в этом случае будет Tritanium, и импортирует форму данных из полученного XML файла
который возвращает значение 34.
У меня есть список из примерно 20 наименований элементов, которые google docs автоматически обновляет идентификатор элемента при каждом открытии файла. Есть ли способ для Excel 2010 реплицировать эту функцию?
Спасибо!
Воля
Лучший ответ:
Вам нужно будет написать свой собственный 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») Ответ №1
Вопрос с 2013 года, некоторое время прошло…
В Excel 2013 существует функция WEBSERVICE для загрузки документов XML, которые будут делать именно то, что вы хотите.
Существует также FILTERXML для поиска загруженного XML-документа с использованием XPath.
Ответ №2Function 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 Ответ №3
Функция “Из Интернета” в меню “Данные” будет выводить онлайн-данные непосредственно в электронную таблицу. Импорт XML-данных также доступен в подменю “От других источников”, также отображаемом в меню данных.
Созданные соединения управляются через диалоговое окно “Соединения” в меню “Данные”.
Пример кода с использованием макросов записи при создании соединения “From Web”:
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