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