Пример доступа к данным из Excel — различия между версиями

Материал из WebHMI Wiki
Перейти к: навигация, поиск
Строка 1: Строка 1:
Ниже приведен простой пример запроса из Excel к WebHMI API.
+
== Чтение данных из лога событий ==
 +
Ниже приведен простой пример запроса из Excel к WebHMI API. В данном примере происходит чтение данных из лога событий.
 +
Данный пример использует Active-X объект и работает только на платформах Windows. Дополнительно используется библиотека для парсинга JSON-ответов.
  
 
Скачать пример [[Файл:API_Example.xlsm]]
 
Скачать пример [[Файл:API_Example.xlsm]]
Строка 52: Строка 54:
 
    
 
    
 
  End Sub
 
  End Sub
 +
</pre>
 +
 +
== Чтение и запись текущих значений регистров ==
 +
Второй пример показывает как прочитать текущие значения регистров и записать новое значение в один из регистров. Данный пример использует библиотеку https://github.com/VBA-tools/VBA-Web
 +
 +
Скачать пример [[Файл:WebHMI_registers_read_and_write.xlsm]]
 +
 +
<pre>
 +
 +
Sub GetRegisters()   
 +
    Dim Client As New WebClient
 +
    Client.BaseUrl = "http://192.168.1.1/api"
 +
   
 +
    Dim Request As New WebRequest
 +
    Request.Resource = "register-values"
 +
   
 +
    Request.Method = WebMethod.HttpGet
 +
    Request.RequestFormat = WebFormat.JSON
 +
    Request.ResponseFormat = WebFormat.JSON
 +
   
 +
    Request.AddHeader "X-WH-APIKEY", "8DA00F5F9B42A8D070651C58F495DB1C3191AF19"
 +
   
 +
    Dim Response As WebResponse
 +
    Set Response = Client.Execute(Request)
 +
    Cells.Range("A2:C1000").Clear
 +
 +
   
 +
    If Response.StatusCode = WebStatusCode.Ok Then
 +
        ' Success, parse response
 +
        Dim RegValue As Object
 +
        Set RegValues = Response.Data
 +
       
 +
      i = 2
 +
      For Each strKey In RegValues.Keys() ' rows
 +
        Cells(i, 1) = RegValues(strKey)("r")
 +
        Cells(i, 2) = RegValues(strKey)("v")
 +
        Cells(i, 3) = RegValues(strKey)("s")
 +
        i = i + 1
 +
      Next
 +
    End If
 +
   
 +
End Sub
 +
 +
 +
Sub WriteValue()
 +
    Cells(1, 9) = "Writing..."
 +
    Dim Client As New WebClient
 +
    Client.BaseUrl = "http://192.168.1.1/api"
 +
   
 +
    Dim Request As New WebRequest
 +
    Request.Resource = "register-values/{Id}"
 +
   
 +
    Request.Method = WebMethod.HttpPut
 +
    Request.RequestFormat = WebFormat.JSON
 +
    Request.ResponseFormat = WebFormat.JSON
 +
   
 +
    Request.AddBodyParameter "value", Cells(2, 7)
 +
    Request.AddUrlSegment "Id", Cells(1, 7)
 +
   
 +
    Request.AddHeader "X-WH-APIKEY", "8DA00F5F9B42A8D070651C58F495DB1C3191AF19"
 +
   
 +
    Dim Response As WebResponse
 +
    Set Response = Client.Execute(Request)
 +
   
 +
    If Response.StatusCode = WebStatusCode.Ok Then
 +
        ' Success
 +
        Cells(1, 9) = "OK"
 +
    Else
 +
        ' Error, display error
 +
        Cells(1, 9) = "ERROR"
 +
       
 +
    End If
 +
 +
End Sub
 +
 +
 
</pre>
 
</pre>

Версия 13:31, 14 сентября 2015

Чтение данных из лога событий

Ниже приведен простой пример запроса из Excel к WebHMI API. В данном примере происходит чтение данных из лога событий. Данный пример использует Active-X объект и работает только на платформах Windows. Дополнительно используется библиотека для парсинга JSON-ответов.

Скачать пример Файл:API Example.xlsm

Const URl As String = "http://192.168.0.1/api/event-data/1"
Sub xmlHttp()

    Dim xmlHttp As Object
    Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    xmlHttp.Open "GET", URl, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.setRequestHeader "Accept", "application/json"
    xmlHttp.setRequestHeader "Host", "192.168.0.1"
    xmlHttp.setRequestHeader "Cookie", " "
    xmlHttp.setRequestHeader "X-WH-APIKEY", "6E51E728896794EBF406E2F070BE7AFBE49E90D4"
    xmlHttp.setRequestHeader "X-WH-START", "1388948941"
    xmlHttp.setRequestHeader "X-WH-END", "1399208143"
    xmlHttp.send


    Dim JSON As New JSON

    Dim p As Object
    Set p = JSON.parse(xmlHttp.ResponseText)
    
    i = 2
    j = 1
    For Each Item In p ' rows
       If (j = 1) Then
          Cells(i, j).NumberFormat = "yyyy-mm-dd hh:mm:ss"
       End If
       If (j = 2) Then
          Cells(i, j).NumberFormat = "#.#" '"$#,##0.00_);[Red]($#,##0.00)"
       End If
       For Each Item2 In Item 'columns
         For Each Item3 In Item2
           If (j = 1 And i > 1) Then
             Cells(i, j) = (Item2(Item3) / 86400) + 25569
           Else
            Cells(i, j) = Item2(Item3)
           End If
           
           Cells(1, j) = Item3
         Next
        j = j + 1
       Next
         i = i + 1
         j = 1
       
    Next
   
 End Sub

Чтение и запись текущих значений регистров

Второй пример показывает как прочитать текущие значения регистров и записать новое значение в один из регистров. Данный пример использует библиотеку https://github.com/VBA-tools/VBA-Web

Скачать пример Файл:WebHMI registers read and write.xlsm


Sub GetRegisters()    
    Dim Client As New WebClient
    Client.BaseUrl = "http://192.168.1.1/api"
    
    Dim Request As New WebRequest
    Request.Resource = "register-values"
    
    Request.Method = WebMethod.HttpGet
    Request.RequestFormat = WebFormat.JSON
    Request.ResponseFormat = WebFormat.JSON
    
    Request.AddHeader "X-WH-APIKEY", "8DA00F5F9B42A8D070651C58F495DB1C3191AF19"
    
    Dim Response As WebResponse
    Set Response = Client.Execute(Request)
    Cells.Range("A2:C1000").Clear

    
    If Response.StatusCode = WebStatusCode.Ok Then
        ' Success, parse response
        Dim RegValue As Object
        Set RegValues = Response.Data
        
       i = 2
       For Each strKey In RegValues.Keys() ' rows
        Cells(i, 1) = RegValues(strKey)("r")
        Cells(i, 2) = RegValues(strKey)("v")
        Cells(i, 3) = RegValues(strKey)("s")
        i = i + 1
      Next
    End If
    
End Sub


Sub WriteValue()
    Cells(1, 9) = "Writing..."
    Dim Client As New WebClient
    Client.BaseUrl = "http://192.168.1.1/api"
    
    Dim Request As New WebRequest
    Request.Resource = "register-values/{Id}"
    
    Request.Method = WebMethod.HttpPut
    Request.RequestFormat = WebFormat.JSON
    Request.ResponseFormat = WebFormat.JSON
    
    Request.AddBodyParameter "value", Cells(2, 7)
    Request.AddUrlSegment "Id", Cells(1, 7)
    
    Request.AddHeader "X-WH-APIKEY", "8DA00F5F9B42A8D070651C58F495DB1C3191AF19"
    
    Dim Response As WebResponse
    Set Response = Client.Execute(Request)
    
    If Response.StatusCode = WebStatusCode.Ok Then
        ' Success
        Cells(1, 9) = "OK"
    Else
        ' Error, display error
        Cells(1, 9) = "ERROR"
        
    End If

End Sub