微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Excel VBA HTTP XMP API - 如何将结果直接导入工作表?

如何解决Excel VBA HTTP XMP API - 如何将结果直接导入工作表?

我正在尝试在 Excel 中使用 HTTP XML API 调用,并且效果很好。我遇到的问题是,要将结果放入工作表中,我必须首先将结果写入桌面上的 xml 文件中,然后将其导入,因为我需要的信息作为属性存储在标签中 - 请参阅输出下面。

我需要能够直接从 API 响应中提取信息并将其放入工作表中。

这是运行 API 调用代码,将文件保存到我桌面上的文件中,然后重新导入:

Sub LoadPCD()

'Setup Call and Headers

Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
Url = "https://myURL.kronos.net/wfc/XmlService"
objHTTP.Open "POST",Url,False
objHTTP.setRequestHeader "User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type","text/xml"
objHTTP.send (Fetch(Sheets("Main").Range("Username"),Sheets("Main").Range("Password"),Sheets("Main").Range("PCD"),Sheets("Main").Range("ComboRule")))

    'Set the replyTXT var
    replyTXT = objHTTP.responseText
    
    'Create the file system
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    'Set wb Variables
    wbName = ActiveWorkbook.Name
    wbPath = "C:\Users\chrw\Desktop"
    
    'Save the replyTXT into a file
    With FSO
        tmpFileName = wbPath & "/" & wbName & ".xml"
        Set ts = .CreateTextFile(tmpFileName,True) '//Will overwrite if file exists
        ts.Write replyTXT
        ts.Close
    End With
    
    'Reimport the xml so it display correctly
    Application.displayAlerts = False
        Sheets("PCD").Cells.EntireRow.Delete
        ActiveWorkbook.XmlImport Url:=tmpFileName,ImportMap:=nothing,Overwrite:=True,Destination:=Range("$A$1")
        Kill tmpFileName
    Application.displayAlerts = True
    
    Sheets("PCD").Select
    
End Sub

这是来自 HTTP 调用的响应。请注意,这些值本身存储在标签中:

<?xml version='1.0' encoding='UTF-8' ?>

<Kronos_WFC TimeStamp="16/06/2021 11:14AM GMT+01:00" version="1.0" WFCVersion="8.1.8.1111">
   <Response Status="Success" Timeout="1800" PersonNumber="111111" Action="logon" PersonKey="111111" Username="UNAME" Object="System">
   </Response>
   <Response Status="Success" Action="RetrieveAllNames">
      <NameList PropertyName="Name">
         <Names>
            <SimpleValue Value="A DA Blue Collar 1st Shift"/>
            <SimpleValue Value="A DA Blue Collar 1st Shift Sat"/>
            <SimpleValue Value="A DA Blue Collar 1st Shift SatSun"/>
            <SimpleValue Value="A DA Blue Collar 1st Shift Sun"/>
            <SimpleValue Value="A DO ARE Early Out"/>
            <SimpleValue Value="A DO ARE Late In"/>
            <SimpleValue Value="A DO ARE Unexcused Absence"/>
            <SimpleValue Value="A DO Blue Collar Flextime"/>
            <SimpleValue Value="A DO Flex"/>
            <SimpleValue Value="A DO White Collar Flextime"/>
            <SimpleValue Value="CH AH Request"/>
            <SimpleValue Value="CH Apprentice from 16"/>
            <SimpleValue Value="CH Apprentice up to 16"/>
            <SimpleValue Value="CH ARE Early Out"/>
            <SimpleValue Value="CH ARE Late In"/>
            <SimpleValue Value="CH ARE Unexcused Absence"/>
            <SimpleValue Value="CH Business Trip"/>
            <SimpleValue Value="CH Home Office"/>
            <SimpleValue Value="CH Machine cleaning"/>
            <SimpleValue Value="CH Management"/>
            <SimpleValue Value="CH Office"/>
            <SimpleValue Value="CH Production"/>
            <SimpleValue Value="CH Production Modulation"/>
            <SimpleValue Value="CH Reintegration sick leave"/>
            <SimpleValue Value="CH Sales Outside"/>
            <SimpleValue Value="CH Temp Staff"/>
            <SimpleValue Value="CH Zargag"/>
         </Names>
      </NameList>
   </Response>
   <Response Status="Success" Action="logoff" Object="System">
   </Response></Kronos_WFC>

我尝试了各种与循环节点相关的选项,但正如您所见,节点不包含信息,因此我返回了行,尽管与条目数相关的空行数正确。

谢谢 克里斯

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。