Импорт данных CSV в Google Sheets - PullRequest
2 голосов
/ 28 октября 2019

При попытке использовать функцию IMPORTDATA для этого файла:

https://www.kaggle.com/stefanoleone992/fifa-20-complete-player-dataset#players_20.csv

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

Эти данные были бы очень важны для работы, которую я делаю. Я бы сэкономил почти 3 месяца работы, чтобы иметь возможность печатать и копировать все, а затем фильтровать в соответствии с моими потребностями.

Было бы очень важно иметь возможность импортировать хотя бы простую информацию обо всех игроках, но не обязательно импортировать все столбцы информации от каждого игрока. Количество столбцов, которые можно импортировать, уже идеально.

Буду признателен, если есть какой-либо способ.

1 Ответ

1 голос
/ 28 октября 2019

Если мое понимание верно, как насчет этого ответа? Думайте об этом как об одном из нескольких ответов.

Проблема и обходное решение:

К сожалению, данные 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.");
  }
}
Поток:

Порядок выполнения этого сценария следующий.

  1. Когда сценарий запущен, команда kaggle для kaggle datasets download -d stefanoleone992/fifa-20-complete-player-datasetзапускается с помощью скрипта Google Apps. Таким образом, ZIP-файл загружается.
  2. Извлечение CSV-файла csvFilename из загруженного ZIP-файла.
  3. Анализ данных CSV из CSV-файла.
  4. Поместите данные 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 не были помещены в электронную таблицу.

Ссылка:

...