我希望让Apps脚本根据工作表中的名称创建新的电子表格。例如,如果我的名单(第7栏)是:
我希望脚本遍历此列表,仅使用名称(减去电子邮件域)替换字符串,在驱动器中搜索与名称匹配的现有文件。 此外,如果存在现有文件,则不执行任何操作,否则创建具有名称的工作表。
下面的代码似乎是遍历列表并替换字符串,但最后两个步骤存在问题。 它会看到Bender不存在,它会创建一个Bender文件,但是当它遍历列表时会创建额外的Bender文件,并且不会创建其他丢失的文件。
任何帮助都将不胜感激。
function findExistingSheets() {
var sheet = SpreadsheetApp.openById('SpreadSheetKey').getSheetByName('ISheetName');
var data = sheet.getDataRange().getValues();
var files = DriveApp.getFolderById("FileKeyID").getFiles();
for (var i = 1; i < data.length; i++) {
var searchFor = data[i][7].replace("@interpret.org.nz","");
while (files.hasNext()) {
var file = files.next();
if(searchFor == file.getName()){
//Don't do anything
}
else {
//Create speadsheet file with the matchfile name.
var newFile = SpreadsheetApp.create(searchFor);
}
}
}
Logger.log(searchFor);
}
答案 0 :(得分:0)
试试这个。我还没有对它进行测试,但我认为它会让你接近。
function findExistingSheets() {
var sheet = SpreadsheetApp.openById('SpreadSheetKey').getSheetByName('ISheetName');
var data = sheet.getDataRange().getValues();
var titles = [];
for (var i = 1; i < data.length; i++)
{
titles.push(data[i][7].replace("@interpret.org.nz",""));
}
var files = DriveApp.getFolderById("FileKeyID").getFiles();
while (files.hasNext())
{
var file = files.next();
var idx = idxOf(titles,file.getName());
if(idx>-1)
{
var newFile = SpreadsheetApp.create(titles[idx]);
}
}
}
function idxOf(array, x)
{
for(var i = 0;i < array.length;i++)
{
if(array[i]==x)
{
return i;
}
}
return -1;
}
答案 1 :(得分:0)
JavaScript索引从0开始,但for
循环从1开始。