Skip to content

Instantly share code, notes, and snippets.

@nalgeon
Last active June 13, 2024 08:37
Show Gist options
  • Save nalgeon/b5d0c7b72bb6b393475ae67e73c86ed3 to your computer and use it in GitHub Desktop.
Save nalgeon/b5d0c7b72bb6b393475ae67e73c86ed3 to your computer and use it in GitHub Desktop.
Пример вызова Подсказок DaData.ru из Excel

Пример вызова Подсказок DaData.ru из Excel

Как подключить пример

  1. Откройте Excel и включите отображение вкладки «Разработчик»
  2. Перейдите в редактор Visual Basic (в ленте Разработчик > Visual Basic).
  3. Откройте список ссылок: в меню Tools > References...
  4. Отметьте пункты «Microsoft Scripting Runtime» и «Microsoft VBScript Regular Expressions 5.5». Нажмите OK.
  5. Скачайте архив с библиотекой VBA-JSON. Распакуйте его.
  6. В меню File > Import file... выберите JsonConverter.bas из распакованного архива.
  7. Откройте модуль Лист1.
  8. Скопируйте код из примера в модуль.
  9. Замените значение константы API_KEY с CHANGE_ME на ваш API-ключ.

Как работает пример

Введите название компании или ИНН в ячейку A1, нажмите «энтер». В соседних ячейках появятся реквизиты компании из Подсказок.

Private Const API_KEY = "CHANGE_ME"
Function Suggest(ByVal name, ByVal query, ByVal count) As Object
Dim http
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
timeout = 2000 'milliseconds
http.setTimeouts timeout, timeout, timeout, timeout
request = "{ ""query"": """ & query & """, ""count"": """ & count & """ }"
http.Open "POST", "https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/" & name
http.setRequestHeader "Content-Type", "application/json"
http.setRequestHeader "Authorization", "Token " & API_KEY
http.send request
Debug.Print http.responseText
Set Suggest = JsonConverter.ParseJson(http.responseText)
End Function
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
If Target.Address = "$A$1" Then
Debug.Print "Source: " & Target.Value
Dim Suggestions As Object
Set Suggestions = Suggest("party", Target.Value, 1)
Dim Company As Object
Set Company = Suggestions("suggestions")(1)("data")
Range("B1").Value = Company("name")("short_with_opf")
Range("C1").Value = Company("ogrn")
Range("D1").Value = Company("inn")
Range("E1").Value = Company("kpp")
Range("F1").Value = Company("okved")
Range("G1").Value = Company("address")("data")("source")
End If
End Sub
@ProstRost
Copy link

Не выходит достать данные со второго уровня данных. что делать???

@Voytos1989
Copy link

Помогите, плз. Делаю всё по инструкции, ловлю ошибку (скрин). При нажатии Debug указывает на конкретное поле (скрин
2023-11-16_19-28-38
2023-11-16_19-28-51
)

@ouroukov
Copy link

ouroukov commented Nov 16, 2023 via email

@TolyanDimov
Copy link

TolyanDimov commented Mar 21, 2024

Может кому пригодиться.
Делал генератор документов по шаблону, и простую интеграция с DaData, растянуто на все столбцы.
В ячейке D2 вводим ИНН. Получаем подсказки в ячейках G, H, I, J (название компании, юр.адрес, код ОКПО, ФИО директора).
Внимание, не кретичная ошибка в ячейке ФИО директора, если это ИП, а не ООО.

Private Const API_KEY = "Ваш API"

Function Suggest(ByVal name, ByVal query, ByVal count) As Object
    Dim http
    Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
    timeout = 2000 'milliseconds
    http.setTimeouts timeout, timeout, timeout, timeout
    request = "{ ""query"": """ & query & """, ""count"": """ & count & """ }"
    http.Open "POST", "https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/" & name
    http.setRequestHeader "Content-Type", "application/json"
    http.setRequestHeader "Authorization", "Token " & API_KEY
    http.send request
    Debug.Print http.responseText
    Set Suggest = JsonConverter.ParseJson(http.responseText)
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim KeyCells As Range
  If Target.Column <> 4 Then Exit Sub
  If Target.Row = 1 Then Exit Sub
  If IsEmpty(Target) Then Target.Offset(0, 3).Resize(1, 4) = Empty: Exit Sub
  Debug.Print "Source: " & Target.Value
  Dim Suggestions As Object
  Set Suggestions = Suggest("party", Target.Value, 1)
  Dim Company As Object
  Set Company = Suggestions("suggestions")(1)("data")
  Target.Offset(0, 3) = Company("name")("short_with_opf")
  Target.Offset(0, 4) = Company("address")("unrestricted_value")
  Target.Offset(0, 5) = Company("okpo")
  Target.Offset(0, 6) = Company("management")("name")
End Sub

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment