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
@perceff
Copy link

perceff commented Jul 29, 2019

или выложил на upload ресурс: http://www.unibytes.com/4-q0c-UNQO-Lqw-Us4P3UgBB

@ouroukov
Copy link

ouroukov commented Dec 9, 2019

Может кому полезно будет посмотреть, как выглядит типичный ответ на запрос:

{
  "suggestions": [
    {
      "value": "ООО ХЛЕБОРОБ",
      "unrestricted_value": "ООО ХЛЕБОРОБ",
      "data": {
        "kpp": "644901001",
        "capital": null,
        "management": {
          "name": "Федоров Владимир Михайлович",
          "post": "ДИРЕКТОР",
          "disqualified": null
        },
        "founders": null,
        "managers": null,
        "branch_type": "MAIN",
        "branch_count": 0,
        "source": null,
        "qc": null,
        "hid": "5581e9e02ce11f9995c34ba8dcbc524144ba6c6ce7243043715117fb36c2116e",
        "type": "LEGAL",
        "state": {
          "status": "ACTIVE",
          "actuality_date": 1546300800000,
          "registration_date": 855619200000,
          "liquidation_date": null
        },
        "opf": {
          "type": "2014",
          "code": "12300",
          "full": "Общество с ограниченной ответственностью",
          "short": "ООО"
        },
        "name": {
          "full_with_opf": "ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ХЛЕБОРОБ",
          "short_with_opf": "ООО ХЛЕБОРОБ",
          "latin": null,
          "full": "ХЛЕБОРОБ",
          "short": "ХЛЕБОРОБ"
        },
        "inn": "6404002815",
        "ogrn": "1026400555675",
        "okpo": null,
        "okved": "46.21.11",
        "okveds": null,
        "authorities": null,
        "documents": null,
        "licenses": null,
        "finance": {
          "tax_system": null,
          "income": null,
          "expense": null,
          "debt": null,
          "penalty": null
        },
        "address": {
          "value": "Саратовская обл, г Энгельс, ул Марины Расковой, д 4",
          "unrestricted_value": "413121, Саратовская обл, г Энгельс, ул Марины Расковой, д 4",
          "data": {
            "postal_code": "413121",
            "country": "Россия",
            "country_iso_code": null,
            "federal_district": null,
            "region_fias_id": "df594e0e-a935-4664-9d26-0bae13f904fe",
            "region_kladr_id": "6400000000000",
            "region_iso_code": null,
            "region_with_type": "Саратовская обл",
            "region_type": "обл",
            "region_type_full": "область",
            "region": "Саратовская",
            "area_fias_id": null,
            "area_kladr_id": null,
            "area_with_type": null,
            "area_type": null,
            "area_type_full": null,
            "area": null,
            "city_fias_id": "c58d0505-54eb-4c34-8216-b14f7cdb0ecb",
            "city_kladr_id": "6400001300000",
            "city_with_type": "г Энгельс",
            "city_type": "г",
            "city_type_full": "город",
            "city": "Энгельс",
            "city_area": null,
            "city_district_fias_id": null,
            "city_district_kladr_id": null,
            "city_district_with_type": null,
            "city_district_type": null,
            "city_district_type_full": null,
            "city_district": null,
            "settlement_fias_id": null,
            "settlement_kladr_id": null,
            "settlement_with_type": null,
            "settlement_type": null,
            "settlement_type_full": null,
            "settlement": null,
            "street_fias_id": "9b203331-73b8-4141-8c16-8d56aa021976",
            "street_kladr_id": "64000013000023400",
            "street_with_type": "ул Марины Расковой",
            "street_type": "ул",
            "street_type_full": "улица",
            "street": "Марины Расковой",
            "house_fias_id": "c7ad9d3c-6fca-40f6-acc4-8bf2eb09f0ef",
            "house_kladr_id": "6400001300002340096",
            "house_type": "д",
            "house_type_full": "дом",
            "house": "4",
            "block_type": null,
            "block_type_full": null,
            "block": null,
            "flat_type": null,
            "flat_type_full": null,
            "flat": null,
            "flat_area": "429.0",
            "square_meter_price": "29032",
            "flat_price": "12454728",
            "postal_box": null,
            "fias_id": "c7ad9d3c-6fca-40f6-acc4-8bf2eb09f0ef",
            "fias_code": "64000013000000002340096",
            "fias_level": "8",
            "fias_actuality_state": "0",
            "kladr_id": "6400001300002340096",
            "geoname_id": null,
            "capital_marker": "0",
            "okato": "63450000000",
            "oktmo": "63650101001",
            "tax_office": "6449",
            "tax_office_legal": "6449",
            "timezone": "UTC+4",
            "geo_lat": "51.4807044",
            "geo_lon": "46.1396026",
            "beltway_hit": null,
            "beltway_distance": null,
            "metro": null,
            "qc_geo": "0",
            "qc_complete": null,
            "qc_house": null,
            "history_values": null,
            "unparsed_parts": null,
            "source": "413113, ОБЛАСТЬ САРАТОВСКАЯ, ГОРОД ЭНГЕЛЬС, УЛИЦА МАРИНЫ РАСКОВОЙ, ДОМ 4",
            "qc": "0"
          }
        },
        "phones": null,
        "emails": null,
        "ogrn_date": 1041292800000,
        "okved_type": "2014",
        "employee_count": null
      }
    }
  ]
}

@Elpomena
Copy link

А подскажите пожалуйста, что за формат даты выгружается? Мне очень нужна дата регистрации, но там какие-то огромные значения. Как переформировать?
Спасибо

@ouroukov
Copy link

ouroukov commented May 27, 2020

А подскажите пожалуйста, что за формат даты выгружается? Мне очень нужна дата регистрации, но там какие-то огромные значения. Как переформировать?
Спасибо

https://ru.wikipedia.org/wiki/Unix-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F
http://i-leon.ru/tools/time
Не?

@Jastinva
Copy link

Подскажите пожалуйста,а как мне растянуть на много строк скрипт? мне нужно чтобы не только в первой строчке грузилось,но и в последующих

@Jastinva
Copy link

Я адаптировала под свои значения. но скажите как растянуть на столбец? у меня большая база

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/findById/" & 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$2" 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("B2").Value = Company("name")("short_with_opf")
Range("C2").Value = Company("branch_count")
Range("D2").Value = Company("employee_count")
Range("E2").Value = Company("employee_count")
End If
End Sub

@vserg2004
Copy link

Подскажите пожалуйста, нет ли у кого готового проекта с проверкой действительности паспорта для физ. лиц?

@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