尝试对此文件使用IMPORTDATA
功能时
https://www.kaggle.com/stefanoleone992/fifa-20-complete-player-dataset#players_20.csv
发生意外错误,表明无法将数据导入电子表格。还有什么其他方法可以将这些数据带到电子表格中?
这些数据对于我正在进行的工作非常重要。能够键入和复制所有内容,然后根据我的需要进行过滤,这将使我省去将近3个月的工作。
能够至少导入所有玩家的简单信息非常重要,但不必一定要从每个玩家导入所有信息列。可以导入的列数已经很完美了。
如果能的话,我将不胜感激。
答案 0 :(得分:1)
players_20.csv
下载https://www.kaggle.com/stefanoleone992/fifa-20-complete-player-dataset
的CSV文件,并将CSV数据放入电子表格中。如果我的理解正确,那么这个答案如何?请认为这只是几个答案之一。
很遗憾,不能直接从https://www.kaggle.com/stefanoleone992/fifa-20-complete-player-dataset#players_20.csv
的URL下载CSV数据。为了下载CSV文件,需要登录到kaggle。作为其他模式,您也可以使用API下载它。在此答案中,为了下载CSV文件,我使用了Kaggle的公共API。
在使用脚本之前,请向https://www.kaggle.com
注册一个帐户,然后检索令牌文件。关于如何检索令牌文件,您可以看到the official document。
要使用Kaggle的公共API,您必须首先使用API令牌进行身份验证。在网站标题中,单击您的用户个人资料图片,然后从下拉菜单中单击“我的帐户”。这将带您进入https://www.kaggle.com/account的帐户设置。向下滚动到页面的标有API的部分:
要创建新令牌,请单击“创建新API令牌”按钮。这会将新的身份验证令牌下载到您的计算机上。
在此脚本中,将使用下载的令牌文件中的令牌对象。
请复制以下脚本并将其粘贴到电子表格的容器绑定脚本中。并且请设置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 datasets download -d stefanoleone992/fifa-20-complete-player-dataset
的kaggle命令与Google Apps脚本一起运行。这样,便下载了ZIP文件。csvFilename
的CSV文件。players_20.csv
的CSV数据有18279行和104列。Utilities.unzip(blob)
发生错误,请进行测试以将其从var blob = UrlFetchApp.fetch(url, params).getBlob()
修改为var blob = UrlFetchApp.fetch(url, params).getBlob().setContentTypeFromExtension()
。如果我误解了您的问题,而这不是您想要的方向,我深表歉意。
如果要选择要添加的列,请按如下所示修改上面的示例脚本。
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();
例如,在the result of benchmark for putting CSV data to Spreadsheet中,如何使用Sheets API放置CSV数据?为此,请如下修改上述示例脚本。在运行脚本之前,please enable Sheets API at Advanced Google services.
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());