减少Googlesheets和GoogleApps脚本的运行时/执行导入功能



目前有一个脚本,可以从单元格引用中从谷歌驱动器中提取CSV文件。只是想知道是否有办法减少运行时间。目前,脚本大约需要45-60秒才能完成运行。任何帮助都将不胜感激,或者以完全替代的方式获得更快的响应,在这种情况下,当我更改单元格引用时,我的数据会更快地被提取。

function importCSV() {
const ss = SpreadsheetApp.getActive();
const id = ss.getSheetByName("Dashboard").getRange("A2").getValue();
const folder = DriveApp.getFolderById(id);
const name = ss.getSheetByName("Dashboard").getRange("B2").getValue();
const name2 = ss.getSheetByName("Dashboard").getRange("C2").getValue();
const file = folder.getFilesByName(name).next();
const file2 = folder.getFilesByName(name2).next();
const csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
const csvData2 = Utilities.parseCsv(file2.getBlob().getDataAsString());

const target = ss.getSheetByName("Input");
const target2 = ss.getSheetByName("Input2");
target.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
target2.getRange(1, 1, csvData2.length, csvData2[0].length).setValues(csvData2);
}

我相信你的目标如下。

  • 您希望降低脚本的处理成本

修改点:

  • idnamename2可以通过一个调用来检索
  • 为了通过解析字符串数据将CSV数据放入电子表格,当使用Sheets API时,可以降低处理成本。Ref而且,可以通过一个API调用将多个CSV数据放入每张表中

当以上几点反映到您的脚本中时,它变成如下。

修改的脚本:

在使用此脚本之前,请在高级Google服务中启用Sheets API。

function importCSV() {
const ss = SpreadsheetApp.getActive();
const dstSheets = ["Input", "Input2"];
const [id, ...filenames] = ss.getSheetByName("Dashboard").getRange("A2:C2").getValues()[0];
const folder = DriveApp.getFolderById(id);
const obj = filenames.map((f, i) => ({dst: ss.getSheetByName(dstSheets[i]).getSheetId(), data: folder.getFilesByName(f).next().getBlob().getDataAsString()}));
var resource = {requests: obj.map(({dst, data}) => ({pasteData: {data: data, coordinate: { sheetId: dst }, delimiter: ","}}))};
Sheets.Spreadsheets.batchUpdate(resource, ss.getId());
}
  • 在该脚本中,从单元格检索到的2个文件名的CSV数据";B2";以及";C2";被放到纸上";输入";以及";输入2";,分别

参考文献:

  • 基准:使用Google Apps脚本将CSV数据导入电子表格
  • 方法:spreadsheets.batchUpdate
  • 粘贴数据请求

最新更新