将新文档添加到文件夹Google云端硬盘

时间:2016-02-11 10:58:11

标签: google-apps-script

对于我的工作,我需要将带有名称和Url的al Jpegs列入电子表格。这些Jpeg放在驱动器上的文件夹中。我的脚本工作,每当我更新它,它将清除工作表并在电子表格上写下我需要的所有信息。但是,当我在文件夹中放入新的Jpegs时,它不会自动更新电子表格。虽然它不必是自动的,但我希望只更新新的jpegs而不是清除所有内容,让脚本再次编写所有内容。这是因为某些文件夹包含多达3000个图像,这需要很长时间才能加载,有时会给我运行时错误。

我尝试了多个代码,只要在该文件夹中检测到新实体时更新并添加新行,就无效。我知道如何从电子表格更新,但不能从文件夹更新,似乎无法弄明白。请参阅下面的代码。非常感谢给我一个答案或者提示如何找到答案。

         function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "CLICK TO UPDATE List", functionName: "Updatelist"}];
  ss.addMenu("Click to update list", menuEntries);
} 
function Updatelist() {
  var folder = DriveApp.getFolderById('My-Folder-ID-HE');
  var contents = folder.getFiles();
  var file;
  var name;
  var link;
  var sheet = SpreadsheetApp.getActiveSheet();
  var date;

sheet.clear();

  var headers = [["Name", "link", "Total jpegs in folder"]];
  sheet.clear();
  sheet.getRange("A1:C1").setValues(headers);
  sheet.getRange("C2").setFormula("=COUNTA(A2:A)");

while(contents.hasNext()) {
   file = contents.next();
   name = file.getName();
   link = file.getUrl();
   data = [name, link]
   sheet.appendRow(data);


 }
} 


function initializeTrigger(){ 
  var folder = DriveApp.getFolderById('My-Folder-ID');
ScriptApp.newTrigger("myFunction")
  .forSpreadsheet(sheet)
  .onChange()
  .create();
}
function myFunction(e){
  Logger.log(e.changeType);
  if(e.changeType=='INSERT_ROW'){
    // do Something
  Browser.msgBox('New row(s) added');
 }
};

谢谢,

1 个答案:

答案 0 :(得分:0)

你在一个非常耗时的循环中使用appendRow ......

使用数组并在一次调用中将此数组写入工作表,以提高脚本效率。

要替换的代码的相关部分:

function Updatelist() {
  var folder = DriveApp.getFolderById('0B#####################5UUU');
  var contents = folder.getFiles();
  var file;
  var name;
  var link;
  var sheet = SpreadsheetApp.getActiveSheet();
  var date;

  sheet.clear();

  var headers = [["Name", "link", "Total jpegs in folder"]];
  sheet.clear();
  sheet.getRange("A1:C1").setValues(headers);
  sheet.getRange("C2").setFormula("=COUNTA(A2:A)");

  var sheetContent=[];
  while(contents.hasNext()) {
    file = contents.next();
    name = file.getName();
    link = file.getUrl();
    data = [name, link]
    sheetContent.push(data)
  }
  sheet.getRange(3,1,sheetContent.length,sheetContent[0].length).setValues(sheetContent);// adapt the starting row/column value to your needs
}

注意:

添加新文档时更新工作表需要定期阅读文件夹的内容,并将其与工作表的数据进行比较,这比简单地清除工作表更加复杂和耗时。更新其内容。另一方面,没有与"将文档添加到文件夹"相关的事件。所以它是唯一可能按时间检查的。这就是为什么我只是建议一种更快,更有效的数据获取方式。我会创建一个触发器来每小时运行一次,假设在那个问题上没有紧急情况;-) -