Если мое понимание верно, как насчет этого ответа? Думайте об этом как об одном из нескольких ответов.
Проблема и обходное решение:
К сожалению, данные CSV нельзя напрямую загрузить с URL-адреса https://www.kaggle.com/stefanoleone992/fifa-20-complete-player-dataset#players_20.csv
. Чтобы скачать CSV-файл, необходимо войти в систему для kaggle. Как и другой шаблон, вы также можете скачать его с помощью API. В этом ответе для загрузки файла CSV я использовал открытый API-интерфейс Kaggle.
Использование:
1. Получить файл токена:
Перед использованием сценария зарегистрируйте учетную запись на https://www.kaggle.com
и получите файл токена. О том, как получить файл токена, вы можете увидеть официальный документ .
Чтобы использовать открытый API Kaggle, вы должны сначала пройти аутентификацию с использованием токена API. В заголовке сайта нажмите на фотографию своего профиля пользователя, а затем на «Моя учетная запись» в раскрывающемся меню. Это приведет вас к настройкам вашей учетной записи на https://www.kaggle.com/account. Прокрутите вниз до раздела страницы, помеченного API:
Чтобы создать новый токен, нажмите кнопку «Создать новый API-токен». Это позволит загрузить новый токен аутентификации на ваш компьютер.
В этом сценарии используется объект токена в загруженном файле токена.
2. Выполнить сценарий:
Скопируйте и вставьте следующий сценарий в связанный с контейнером сценарий электронной таблицы. И, пожалуйста, установите переменные csvFilename
, path
и tokenObject
. В вашем случае я уже установил csvFilename
и path
. Поэтому, пожалуйста, установите только свой токен.
function myFunction() {
var csvFilename = "players_20.csv"; // Please set the CSV filename.
var path = "stefanoleone992/fifa-20-complete-player-dataset"; // Please set the path.
var tokenObject = {"username":"###","key":"###"}; // <--- Please set the token object.
var baseUrl = "https://www.kaggle.com/api/v1/datasets/download/";
var url = baseUrl + path;
var params = {headers: {Authorization: "Basic " + Utilities.base64Encode(tokenObject.username + ':' + tokenObject.key)}};
var blob = UrlFetchApp.fetch(url, params).getBlob();
var csvBlob = Utilities.unzip(blob).filter(function(b) {return b.getName() == csvFilename});
if (csvBlob.length == 1) {
var csvData = Utilities.parseCsv(csvBlob[0].getDataAsString());
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
} else {
throw new Error("CSV file of " + csvFilename + " was not found.");
}
}
Поток:
Порядок выполнения этого сценария следующий.
- Когда сценарий запущен, команда kaggle для
kaggle datasets download -d stefanoleone992/fifa-20-complete-player-dataset
запускается с помощью скрипта Google Apps. Таким образом, ZIP-файл загружается. - Извлечение CSV-файла
csvFilename
из загруженного ZIP-файла. - Анализ данных CSV из CSV-файла.
- Поместите данные CSV на активный лист.
- В этом сценарии все данные обрабатываются большим двоичным объектом. Таким образом, файл не создан.
Примечание:
- Кажется, что данные CSV большие. Поэтому, пожалуйста, подождите, пока скрипт не закончится.
- В моей среде я потратил около 150 секунд, пока данные CSV не были помещены в электронную таблицу.
- Данные CSV
players_20.csv
имеют 18279 строк и 104 столбца.
- Если ошибка возникает в
Utilities.unzip(blob)
, пожалуйста, проверьте, чтобы изменить с var blob = UrlFetchApp.fetch(url, params).getBlob()
на var blob = UrlFetchApp.fetch(url, params).getBlob().setContentTypeFromExtension()
.
Ссылки:
Если я неправильно понял ваш вопрос, и это не то направление, которое вам нужно, яизвиниться.
Добавлено 1:
Если вы хотите выбрать столбцы, которые хотите поставить, измените приведенный выше пример сценария следующим образом.
От:
var csvData = Utilities.parseCsv(csvBlob[0].getDataAsString());
var sheet = SpreadsheetApp.getActiveSheet();
Кому:
var csvData = Utilities.parseCsv(csvBlob[0].getDataAsString());
var needColumns = [1, 2, 3];
csvData = csvData.map(function(row) {return needColumns.map(function(col) {return row[col]})});
var sheet = SpreadsheetApp.getActiveSheet();
- В приведенной выше модификации в качестве контрольного примера столбцы 1, 2 и 3 помещаются в электронную таблицу.
Добавлено 2:
Начиная с результат теста для помещения данных CSV в электронную таблицу , например, как насчет использования Sheets API для размещения данных CSV? Для этого, пожалуйста, измените приведенный выше пример сценария следующим образом. Перед запуском сценария, , пожалуйста, включите Sheets API в службах Advanced Google.
От:
var csvData = Utilities.parseCsv(csvBlob[0].getDataAsString());
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
Кому:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var resource = {requests: [{pasteData: {data: csvBlob[0].getDataAsString(), coordinate: {sheetId: sheet.getSheetId()}, delimiter: ","}}]};
Sheets.Spreadsheets.batchUpdate(resource, ss.getId());
- В этом случае я потратил около 50 секунд, пока данные CSV не были помещены в электронную таблицу.
Ссылка: