从云端硬盘获取最新添加的文件

时间:2019-07-18 01:58:01

标签: google-apps-script google-sheets

我正在编写一个脚本,以将最新添加的csv文件搜索到Google驱动器文件夹中,并将内容添加到“主表”的最后一行。不幸的是,每次将csv文件放在驱动器文件夹中时,其文件名都不相同,因此我要做的只是最后添加的文件。

我收到以下错误消息:

“ TypeError:在对象Masergy报告中找不到函数hasNext。(第7行,文件“代码”)”

感谢任何帮助解决此问题的方法。

function importData()
{
  var ss = SpreadsheetApp.openById("1FldzyMKoQnbsqNxCYUZsizxVLShHrLBq_llJnu2so9o");
  var folderID = (typeof(folderID) !== 'undefined')? folderID : '1vzOduvWFCQGZYFuq_AKUY4NfDb2dW5fB';//default folderID
  var fldr = DriveApp.getFolderById(folderID);
  var files = fldr.getFilesByType('text/csv');
  while (fldr.hasNext())
  {
    var file = files.next();
    var filename = file.getFilesByType('text/csv');
    if(fileType.match(files))
    {
      var csvstr=file.getBlob().getDataAsString();
      var csvData=Utilities.parseCsv(csvstr);
      var sheet = ss.getSheetByName("MasergyReports");
      var lastrow = sheet.getLastRow();
sheet.getRange(lastrow + 1, 1, csvData.length, csvData[0].length).setValues(csvData);
      file.setName(filename.slice(0,-3) + 'old');  //the .old files won't pass the file re filter next time. 
    }
  }
}

1 个答案:

答案 0 :(得分:0)

问题:

  • 您的folderID变量似乎过于复杂,为什么要在该行中定义变量时检查其是否未定义?
  • 您要遍历文件夹对象而不是while语句中的文件。
  • file.getFilesByType()是无效的方法。
  • fileType未定义,但您在if语句中使用它。
  • 由于您的filename变量无效,因此您的setName()语句也无效。
  • 设置名称不会更改文件类型,您需要在if语句中添加一行以检查'.old'模式的文件名。

修改后的代码:

仅用ID定义var folderID,就没有理由检查它是否未定义,因为无论如何您都在定义它:

var folderID = '1vzOduvWFCQGZYFuq_AKUY4NfDb2dW5fB';

您应该遍历变量files,而不是fldr

while (files.hasNext())

更改var fileName来实际获取每个文件的文件名:

var fileName = file.getName();

更改您的if语句以获取文件的内容类型,而不是尝试在var filename中对其进行定义。还添加了对以“ .old”结尾的文件名的检查,以确保我们仅处理新文件:

if(file.getBlob().getContentType() === "text/csv" && !fileName.match(/.old/))

在您的var fileName语句中使用新的setName()

file.setName(fileName.slice(0,-3) + ".old");

示例:

function importData()
{
  var ss = SpreadsheetApp.openById("1FldzyMKoQnbsqNxCYUZsizxVLShHrLBq_llJnu2so9o");
  var folderID = '1vzOduvWFCQGZYFuq_AKUY4NfDb2dW5fB';
  var fldr = DriveApp.getFolderById(folderID);
  var files = fldr.getFilesByType('text/csv');
  while (files.hasNext())
  {
    var file = files.next();
    var fileName = file.getName();
    if(file.getBlob().getContentType() === "text/csv" && !fileName.match(/.old/))
    {
      var csvstr=file.getBlob().getDataAsString();
      var csvData=Utilities.parseCsv(csvstr);
      var sheet = ss.getSheetByName("MasergyReports");
      var lastrow = sheet.getLastRow();
      sheet.getRange(lastrow + 1, 1, csvData.length, csvData[0].length).setValues(csvData);
      file.setName(fileName.slice(0,-3) + "old");  //the .old files won't pass the file re filter next time. 
    }
  }
}

参考文献

相关问题