【问题标题】:Reduce the runtime/execeution on import function for Googlesheets and GoogleApps Script减少 Google 表格和 Google Apps 脚本的导入功能的运行时间/执行
【发布时间】:2021-06-19 13:59:25
【问题描述】:

目前有一个脚本可以从单元格引用中从谷歌驱动器中提取 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);
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    我相信你的目标如下。

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

    修改点:

    • idnamename2可以一键找回。
    • 为了将CSV数据通过解析字符串数据放到Spreadsheet中,当使用Sheets API时,可以降低处理成本。 Ref 此外,通过一次 API 调用,可以将多个 CSV 数据放入每个工作表中。

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

    修改后的脚本:

    在使用此脚本之前,please enable Sheets API at Advanced Google services

    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());
    }
    
    • 在此脚本中,将从单元格“B2”和“C2”中检索到的文件名的 2 个 CSV 数据分别放入工作表“Input”和“Input2”中。

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多