csv - 将 CSV 导入表格需要太长时间

标签 csv google-apps-script google-sheets

我正在尝试导入大约 CSV 文件。从 GMail 附件到 Google 表格中有 7500 行,执行时间超过了允许的 6 分钟。

我正在关注本教程:https://developers.google.com/apps-script/articles/docslist_tutorial#section2我的代码列在下面

一直消耗时间的部分是将数据推送到新工作表中:

  // Push data into the sheet
  for ( var n=0, lenCsv=csvData.length; n<lenCsv; n++ ) {
    newsheet.getRange(n+1, 1, 1, csvData[n].length).setValues(new Array(csvData[n]));
  }  

有什么方法可以提高其性能并使其更快吗?

提前致谢。

下面列出了我的代码。

      var attachmentData = attachments[k].getDataAsString();


      var attachmentClean = attachmentData.split('  ').join(',');
      var attachmentCleanA = attachmentClean.split(',');

      var csvData = Utilities.parseCsv(attachmentCleanA);

      var SheetName = String(csvData[1]).substring(5,7)+ "-" + String(csvData[1]).substring(0,4);

      Logger.log("SheetName:"+SheetName);

      ss = SpreadsheetApp.openById('XXXXXXXXX');

      var sheet = ss.getSheetByName(SheetName);

      if (sheet == null){
        var newsheet = ss.insertSheet(SheetName);
      }else{
        sheet.clearContents();
        var newsheet = sheet;
      }
      Logger.log("Entering "+csvData.length+" rows");

      // Push data into the sheet
      for ( var n=0, lenCsv=csvData.length; n<lenCsv; n++ ) {
        newsheet.getRange(n+1, 1, 1, csvData[n].length).setValues(new Array(csvData[n]));
      }  

最佳答案

这一行:

var csvData = Utilities.parseCsv(attachmentCleanA);

创建一个二维数组。 Google Documentation - parseCsv

如果您的 csvData 变量确实是一个二维数组,那么您所需要做的就是使用这行代码而不使用 for 循环:

newsheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

范围从第一行第一列开始,并设置一个范围,该范围是 csvData 外部数组的长度,列数为第一个内部数组中的元素数。

请注意,如果您的数据具有不同长度的内部数组,setValues() 将产生错误。

如果所有内部数组的长度相同,那么您不能避免循环遍历每个内部数组。但是,我不知道你的数据是什么样的。如果 CSV 中的每行数据在行中具有相同数量的值,则不需要 for 循环。

因此,改进一直占用的代码部分完全取决于行的长度是否相同。

您不需要 setValues() 方法中的 new Array() 部分。如果 csvData 数组确实是一个好的二维数组,那么它就已经是一个数组了。您不需要从已经是数组的内容创建另一个数组。

关于csv - 将 CSV 导入表格需要太长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816223/

相关文章:

javascript - 如何使多个依赖下拉输入更有效?

python - 比较两个 CSV 文件之间的值并写入第三个 CSV 文件

python - 使用 csv 读取将值添加到 DASK 数据帧导入的列

javascript - 谷歌脚本 UrlFetchApp “method” : “delete” not working

google-sheets - 有条件导入范围

google-apps-script - 使自定义函数刷新

angularjs - 使用 Angularjs 将 Excel 转换为 JSON

python - 带有 2 行标题并导出到 csv 的 pandas 数据框

javascript - 尝试使用表格作为数据库来更新 WooCommerce 中的价格

javascript - 如何更高效地生成大量HTML