【问题标题】:Import from CSV is very slow从 CSV 导入非常慢
【发布时间】:2018-03-03 16:16:50
【问题描述】:

当我将 csv 表格导入 Google 表格时,我的脚本(见下文)非常慢。有人知道问题出在哪里吗?

我已经在不同的帐户上尝试过

问候

function import_konto_kst_statistik_budget() {
  var fSource = DriveApp.getFolderById('1B2t86GVMoB4yilJ5ieWuGpxFYzsVm8bs'); // reports_folder_id = id of folder where csv reports are saved
  var fi = fSource.getFilesByName('konto_kst_statistik_budget.csv'); // latest report file
  var ss = SpreadsheetApp.getActive()
  var sheet = ss.getSheetByName('90_konto_kst_statistik_budget'); // Select Sheet Konto
  sheet.activate()  // aktiviert das Sheet Konto
  sheet.clear()  // löscht alle Inhalte auf Sheet Konto

  if ( fi.hasNext() ) { // proceed if "konto.csv" file exists in the reports folder
    var file = fi.next();
    var csv = file.getBlob().getDataAsString();
    csv = csv.replace(/'/g, '"');
    var csvData = CSVToArray(csv); // see below for CSVToArray function

    // loop through csv data array and insert (append) as rows into 'NEWDATA' sheet
    for ( var i=0, lenCsv=csvData.length; i<lenCsv; i++ ) {
      sheet.getRange(i + 1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
    }
  }
}

【问题讨论】:

标签: google-apps-script google-sheets


【解决方案1】:

由于这个循环,您的脚本很慢:

for ( var i=0, lenCsv=csvData.length; i<lenCsv; i++ ) {
      sheet.getRange(i + 1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
  }

改成:

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

原因:
使用 setValues 的写操作开销很大,耗时较长,所以尝试write your data in one go where ever possible.

编辑:
如果您一次输入一行的原因是您的 CSV 数据中列的长度可变。我建议修改您的 CSVtoArray() 函数以返回具有统一列长度的数组

【讨论】:

  • 什么是icsvData[i].length 换了一个?如果CSVtoArray() 有统一的列长,是不是0 而不是?
  • 应该是csvData[0].length,刚刚修改了
  • 感谢您的建议,我收到您的代码错误(抱歉是德语)“Falsche Bereichsbreite,战争 4,solllte jedoch 1 sein。(Zeile 159,Datei “代码”)Schließen”谷歌翻译错误的区域宽度是 4,但应该是 1。(第 159 行,文件“代码”)关闭
  • 我想多了,数组长度不相等。如果您查看电子表格,至少会写入第一行。
  • 您能否发布您的 csvtoarray() 函数和一个示例 csv 文件以进行验证。
猜你喜欢
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2018-05-07
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多