如何避免csv上传的重复

时间:2018-02-22 19:14:42

标签: javascript csv google-apps-script

我一直在下一个剧本中工作:

function test(){
  var archivos = DriveApp.getFolderById("someFolderID").getFiles();
  var appendTo = SpreadsheetApp.openById("someSpreadsheetID");
  var ss = appendTo.setActiveSheet(appendTo.getSheets()[0]);

  Logger.log(ss.getName())
  var csvData = Utilities.parseCsv(csvFile);

  while(archivos.hasNext()){
    var archivo = archivos.next()
    var csvFile = archivo.getBlob().getDataAsString();
    var numRows = ss.getLastRow() +1;

    var csvData = Utilities.parseCsv(csvFile);
    ss.getRange(numRows , 1, csvData.length, csvData[0].length).setValues(csvData); 
    SpreadsheetApp.flush();
  }

}

我需要每周运行它上传一个新的csv。每一次。

所以,问题是:如果不再上传旧的和已经上传的文件,我怎么能这样做呢?像一次性条件。

谢谢!

1 个答案:

答案 0 :(得分:0)

一种选择是在PropertiesService的脚本中记录您上次执行备份的时间:

    ...
    SpreadsheetApp.flush();
  }
  PropertiesService().getScriptProperties().setProperty("Last Backup", String(new Date().getTime()));
}

您将在脚本中检查此时间戳(如果未设置该属性,则默认为0),并确保您只处理自上次备份以来已修改的文件。

  ...
  var ps = PropertiesService().getScriptProperties();
  var lastUpdateTime = ps.getProperty("Last Backup") || 0;
  while (archivos.hasNext()) {
    var archivo = archivos.next();
    if (archivo.getLastUpdated().getTime() - lastUpdateTime > 0) {
      /*
        Get as a CSV file, append to spreadsheet, etc.
       */
      SpreadsheetApp.flush();
    }
  }
  ps.setProperty("Last Backup", String(new Date().getTime()));
}

我已经给出了上面的示例代码,假设这是将要使用的唯一脚本(即getScriptProperties()是最有用的存储设备),但是根据这个脚本的使用方式,其中一个其他两个可能对你更有意义。