Чтобы ответить на ваш вопрос, нет, вы не можете напрямую импортировать Zip-файл, содержащий CSV, непосредственно в электронную таблицу. Чтобы ответить на ваш второй вопрос:
Этот вопрос довольно широк и его необходимо разбить на три бита.
- Извлечение Zip из URL
- Извлечение CSV из Zip
- Вставка CSV в свой лист
Я кратко рассмотрим каждый из этих трех областей, чтобы вы собираетесь в правильном направлении, я не собираюсь выписывать вам полноценное решение. Я предоставляю некоторые примеры кода, чтобы облегчить вам работу, это не должно быть сквозным решением.
Извлечение Zip из URL
Вы можете сделать это с URLFetchApp Service.
Что-то вроде:
var urlData = UrlFetchApp.fetch(link);
var zipBlob = urlData.getBlob();
var files = Utilities.unzip(blob);
Извлечение CSV из Zip
Вам нужно получить содержимое файла ZIP, найдите файл CSV в ZIP, а затем разобрать его как CSV в массив. В моем примере я использую регулярное выражение для выхода из CSV, поскольку скрипт CSV для скриптов приложений не работает.
function GetCSVFromZip(zipBlob){
var files = Utilities.unzip(zipBlob);
var csvAttachment = FindBlobByName(files, 'myPartialName');
if(csvAttachment !== -1){
var dataString = csvAttachment.getDataAsString();
var escapedString = dataString.replace(/(?=["'])(?:"[^"\\]*(?:\\[\s\S][^"\\]*)*"|'[^'\\]\r\n(?:\\[\s\S][^'\\]\r\n)*')/g, '\r\n'); //http://stackoverflow.com/a/29452781/3547347
var csv = Utilities.parseCsv(escapedString);
}
}
//Finds a blob by a partial name match, assumes no multiple matches
function FindBlobByName(blob, name){
for(var i = 0; i < blob.length; i++){
var blobName = blob[i].getName();
var regex = new RegExp(name, 'i');
var result = blobName.match(regex);
if(result){
return blob[i];
}
}
return -1;
}
Вставка CSV в свой лист
Вы должны использовать SpreadsheetApp Service для этого. Получите таблицу, получите диапазон данных и задайте его значения для вашего массива CSV. Что-то в этих строках:
var sheet = SpreadsheetApp.openById(id).getSheetByName(name);
var range = sheet.getRange(1, 1, csv.length, csv[0].length);
range.setValues(csv);