下载整个 .csv 数据的 url 似乎是固定的(不需要appsession 部分)。
https://c0dcn566.caspio.com/dp/9b0d7000447c1af4abb545f3b8ae?RecordID=&PageID=2&PrevPageID=&cpipage=3&download=1&CPIorderBy=P1GP&CPISortType=desc&downloadFormat=csv
但是,由于文件太大,您无法使用IMPORTDATA 步骤直接导入它。所以你必须编写一个 GoogleAppScript。
如果您认为 .csv 文件的 url 可能会更改,您可以使用 IMPORTFROMWEB 并激活 javascript 呈现来检索地址。该插件并非完全免费。检查免费计划的限制。
A1:感兴趣的网站; A2:XPath 表达式; A3:B3 : 激活 javascript 的选项 (TRUE)
A4 中的公式(Concat+Regex):
="https://c0dcn566.caspio.com/dp/"®EXEXTRACT(IMPORTFROMWEB(A1;A2;A3:B3);"""appKey"":""(.+?)""")&"?RecordID=&PageID=2&PrevPageID=&cpipage=3&download=1&CPIorderBy=P1GP&CPISortType=desc&downloadFormat=csv"
这样,您始终拥有用于下载 .csv 的最新更新网址。
您也可以使用IMPORTFROMWEB 检索数据,但仅用于第一页(100 个结果)。增加 url 中的 cpipage 参数不足以加载和获取 GoogleSheets 中的其余数据。前 5 列的示例:
GoogleAppScript 部分。在脚本编辑器中,您现在可以使用这种脚本(source):
function importCSVFromWeb() {
// Provide the full URL of the CSV file.
//var csvUrl = "https://c0dcn566.caspio.com/dp/9b0d7000447c1af4abb545f3b8ae?RecordID=&PageID=2&PrevPageID=&cpipage=3&download=1&CPIorderBy=P1GP&CPISortType=desc&downloadFormat=csv";
var csvUrl = SpreadsheetApp.getActiveSheet().getRange(4, 1).getValue();
var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
var csvData = Utilities.parseCsv(csvContent);
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
你可以直接用csv的固定url声明csvUrl变量。或者使用您使用IMPORTFROMWEB 构建的网址。在这种情况下,您必须指定包含地址的单元格的位置(示例中的第 4 行,第 1 列)。
运行脚本后,活动工作表将填充数据。警告:它可能会给你的 CPU 带来压力。加载数据后,您可以创建一个新工作表并使用QUERY、FILTER、SORT、...来转换之前创建的表。
如果你想要一些自动的东西(脚本在没有你干预的情况下启动),你应该使用triggers。
或者,您也可以编写自定义函数来加载 csv。但这有点棘手,因为您需要在导入数据之前过滤数据。否则你会得到一个“太大”的错误。例如,要只保留“AHL”联赛的球员,您可以编写如下内容(基础脚本归功于 @Cooper):
function importCSV(url) {
var csvContent = UrlFetchApp.fetch(url).getContentText();
var csvData = Utilities.parseCsv(csvContent);
var x = 'AHL';
var d=0;
for(var i=0;(i-d)<csvData.length;i++) {
if(csvData[i-d][0]!==x) {
csvData.splice(i-d++,1);
}
}
return csvData;
}
所以现在,您可以使用“importCSV”公式(importCSV(url.retrieved.with.IMPORTFROMWEB 或 fixed.url))来加载数据:
到此为止。