Я использую Excel Power Query и VBA, чтобы попытаться автоматизировать вызов API.Я почти не знаю VBA, и у меня это работает только путем записи макроса и его настройки.
В настоящее время у меня есть это - поэтому он вызывает API, с указанными targetId и ScanId и моим ключом аутентификации:
ActiveWorkbook.Queries.Add Name:="scan-result", Formula:= _
"let" & Chr(10) & " Source = Json.Document(Web.Contents(""https://api.mcafeesecure.com/api/v1/scan-result.json?**targetId**=12345&**scanId**=aasdhgfdhgfaksdfgdhajsdfgdha"", [Headers=[#""x-apikey""=""mykeyhere""]]))," & Chr(10) & " scan = Source[scan]," & Chr(10) & " #""Converted to Table"" = Record.ToTable(scan),"
[etc]
В настоящее время это работает, если я указываю цель и идентификаторы сканирования вручную в каждом вызове. НО Мне нужно, чтобы targetId и ScanId были переменными, которые находятся на моей вкладке «Сводка сканирования» в столбцах A и D соответственно.Мне нужен VBA для циклического перебора всех строк в таблице «Сводка сканирования» - запрос A2 и D2 и вывод в таблицу, затем A3 и D3 и т. Д.
Любая помощь будет принята с благодарностью!
Заранее спасибо !!
ОБНОВЛЕНИЕ: у меня работает цикл, но значения TargetID и ScanID не анализируются в вызове API ...
Ошибка, которую я получаю от запроса Power: = Json.Document (Web.Contents ("https://api.mcafeesecure.com/api/v1/scan-result.json?targetId=" & TargetID &" & scanId = "& ScanID, [Headers = [#" x-apikey "="mykeygoeshere"]])) Expression.Error: Имя 'TargetID' не распознано. Убедитесь, что оно написано правильно. Когда я посмотрел на запрос, я подумал, что у меня там будет нужный targetID / ScanId, но вместо этого япросто есть слова ...?
VBA код:
Dim TargetID As String
Dim ScanID As String
Dim i As Long
For i = 1 To 2
TargetID = Sheets("Scan Summary").Cells(i, 1).Value
ScanID = Sheets("Scan Summary").Cells(i, 4).Value
ActiveWorkbook.Queries.Add Name:="scan-result", Formula:= _
"let" & Chr(10) & " Source = Json.Document(Web.Contents(""https://api.mcafeesecure.com/api/v1/scan-result.json?targetId="" & TargetID & ""&scanId="" & ScanID, [Headers=[#""x-apikey""=""mykeygoeshere""]]))," & Chr(10) & " scan = Source[scan]," & Chr(10) & " #""Converted to Table"" = Record.ToTable(scan)," & Chr(10) & " #""Transposed Table"" = Table.Transpose(#""Converted to Tabl" & _
"e"")," & Chr(10) & " #""Promoted Headers"" = Table.PromoteHeaders(#""Transposed Table"", [PromoteAllScalars=true])," & Chr(10) & " #""Changed Type"" = Table.TransformColumnTypes(#""Promoted Headers"",{{""dateTime"", type datetime}, {""targetId"", Int64.Type}, {""scanId"", type text}, {""vulns"", type any}, {""sevCountInfo"", type any}, {""sevCountVuln"", type any}, {""ports"", type any}}" & _
")," & Chr(10) & " #""Expanded vulns"" = Table.ExpandListColumn(#""Changed Type"", ""vulns"")," & Chr(10) & " #""Expanded vulns1"" = Table.ExpandRecordColumn(#""Expanded vulns"", ""vulns"", {""severity"", ""protocol"", ""vulnId"", ""first_found_date"", ""port"", ""pci""}, {""vulns.severity"", ""vulns.protocol"", ""vulns.vulnId"", ""vulns.first_found_date"", ""vulns.port"", ""vulns.pci""})" & _
"," & Chr(10) & " #""Reordered Columns"" = Table.ReorderColumns(#""Expanded vulns1"",{""dateTime"", ""targetId"", ""scanId"", ""vulns.vulnId"", ""vulns.severity"", ""vulns.protocol"", ""vulns.first_found_date"", ""vulns.port"", ""vulns.pci"", ""sevCountInfo"", ""sevCountVuln"", ""ports""})," & Chr(10) & " #""Removed Columns"" = Table.RemoveColumns(#""Reordered Columns"",{""sevCountInfo""," & _
" ""sevCountVuln"", ""ports""})" & Chr(10) & "in" & Chr(10) & " #""Removed Columns"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=scan-result;Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [scan-result]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False