Ну, с csv вместо Excel.Workbook будут другие функции. Главное у сервиса облака ссылку на скачивание файла получить. Вот вариант запроса и для csv:
Код
let
Source = Csv.Document(Web.Contents("https://www.planetaexcel.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=350996&action=download"),[Delimiter=";", Columns=8]),
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Replaced Value" = Table.ReplaceValue(#"Promoted Headers",".",",",Replacer.ReplaceText,{"CV_PRICE_1"}),
#"Changed Type" = Table.TransformColumnTypes(#"Replaced Value",{{"IE_XML_ID", Int64.Type}, {"IE_NAME", type text}, {"IE_PREVIEW_TEXT", type text}, {"IE_DETAIL_TEXT", type text}, {"IP_PROP61", type text}, {"CV_QUANTITY_FROM", type text}, {"CV_QUANTITY_TO", type text}, {"CV_PRICE_1", type number}})
in
#"Changed Type"
VladTim, если что весь код генерируется редактором запросов PQ самостоятельно, я только на кнопки жал: получить данные из интернета и т.д. Ручками код не дописывал.
Артур, если вы обратили внимание, то во всех ссылках на файлы указывалась прямая ссылка на его скачивание. Фактически, при обновлении запроса файл скачивается во временную папку, а потом уже открывается для чтения данных. Следовательно, для первой ссылке нужно преобразовать её в прямую ссылку на загрузку.
Код
let
Source = Excel.Workbook(Web.Contents("https://downloader.disk.yandex.ru/disk/8b084f76099bfd71448dbecbf7079dc13dae7aaec4fefe0db6cce2cb4fcc5c20/5d473857/YnnUNmZqrmxORuESdQgZaMf3QIKK0ct15trSTq3FSpyHKWZghi0O8595F1IGo-w4aUvUFDv2gAAd5e_iB2_iLA%3D%3D?uid=0&filename=02_Рабочий%20список.xlsx&disposition=attachment&hash=ZkVWIMKFBhBgvFJUZTw81LcR0%2BkRxuGOqKFNSbd/hJeYIMRgBy9gYgX%2BsG1kxBX%2Bq/J6bpmRyOJonT3VoXnDag%3D%3D&limit=0&content_type=application%2Fvnd.openxmlformats-officedocument.spreadsheetml.sheet&owner_uid=265744659&fsize=623483&hid=01ea92e6bab83a035fe9c25df3e0178e&media_type=document&tknv=v2"), null, true),
Лист1_Sheet = Source{[Item="Лист1",Kind="Sheet"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(Лист1_Sheet,{{"Column1", type text}, {"Column2", type text}, {"Column3", type any}, {"Column4", type any}, {"Column5", type any}, {"Column6", type any}, {"Column7", type any}, {"Column8", type any}, {"Column9", type any}, {"Column10", type any}, {"Column11", type any}, {"Column12", type any}, {"Column13", type any}, {"Column14", type any}, {"Column15", type any}, {"Column16", type any}, {"Column17", type text}, {"Column18", type text}, {"Column19", type text}, {"Column20", type any}})
in
#"Changed Type"
А вот для папки - нужно искать по какому принципу яндекс формирует такие ссылки на закачку. Тогда по имени файла, разбирая веб страницу со списком файлов, формировать такие ссылки и качать в функции итераторе , например List.Transform Может проще поставить клиент яндекс диск? Updated Судя по этому обсуждению Как в Яндекс-диске получить самую что ни есть прямую ссылку на файл?, можно нарваться на такую проблему
Цитата
а выудить ссылку яндекса можно скачав свой загруженный файл а затем скопировать адрес скачки, например через Opera качать и там будет прямой адрес, но вот я тестировал и вроде тот адрес работает часов 6, типа временный хеш
если использовать предложенный мной метод. Там, в обсуждении, есть и другие подходы - дерзайте.
Андрей VG написал: нужно преобразовать её в прямую ссылку на загрузку
а как это делается? по ссылке, похоже, есть ответы. спасибо, Андрей с гуглдиска без изменений ссылки смог только .csv и .xlsx получить. и то один раз скачал, а второй раз по непонятным причинам ссылка возвращает html-текст. как то запутано все. не пойдет мне такой вариант
Андрей VG написал: А вот для папки - нужно искать по какому принципу яндекс формирует такие ссылки на закачку
Зачем искать, если она есть, но только для мыл на yandex.ru
Код
UU = "https://yadi.sk/i/03bE933n3PqpG2"
URL = GetyanURU(UU)
Debug.Print URL
Function GetyanURU(UU) As String
GetyanURU = ""
UU = Replace(UU, "/", "%2F")
UU = Replace(UU, ":", "%3A")
URL = "https://cloud-api.yandex.net/v1/disk/public/resources/download?public_key=" & UU
On Error Resume Next
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
With oXMLHTTP
.Open "GET", URL, False
.send
sHTML = .responseText
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Pattern = Chr(34) & "(https(.+?))" & Chr(34)
Set oMatches = RegExp.Execute(sHTML)
If oMatches.Count > 0 Then
GetyanURU = oMatches(0).subMatches(0)
End If
End With
Set oXMLHTTP = Nothing
End Function
doober написал: Зачем искать, если она есть, но только для мыл на yandex.ru
Сергей, большое спасибо! Правда, для папки даёт не список файлов для скачивания, а zip архив содержимого папки. Но разбор zip в Power Query то ещё счастье... Хотя и решаемое. Так что это не ответ на то, как получать файлы из папки по очереди В общем, прошу не счесть это чрезмерной наглостью, но можно ссылочку на доки? Несколько попыток поиска не дали результата, как была получена такая ссылка. Не ходить же век с протянутой рукой. Кто ищет - тот найдёт API Яндек.Диска, спасибо за наводку!