多年来,我使用了大量的问答目录,所以非常感谢。
我一直在Google表格中冒险进入Google Scripts的世界 - 我是js和脚本的坚定新手,所以请耐心等待。
我目前在连接的Google云端硬盘中有一个包含完整文件名列的工作表(例如 - Images / ImageTEST123.jpg)。我一直在修补一个带有文件名的代码,搜索驱动器并吐出图像本身的URL - 见下文。
function searchq() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getRange(2,14);
var searchTerm = range.getValue();
var r = sheet.getLastRow();
var files = DriveApp.searchFiles("title contains '"+searchTerm.replace("'","\\'")+"'");
var output = [];
while (files.hasNext()) {
var file = files.next();
var url = file.getUrl();
output.push(url);
}
sheet.getRange(2, 15, output.length, 1).setValue(url);
}
我知道这远非整洁,但它目前有效,(从[2,14]中取出搜索词并将URL粘贴到[2,15]中)。我想让这个脚本遍历第14列的每一行,并将其各自的URL分配到第15列。
我确信我能做的事情很简单,但任何帮助都会很棒。
如果您需要澄清,请询问!
干杯,
更新:我花了太多时间在这上面,我觉得我已经接近了。
function searchz() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var r = sheet.getLastRow();
var range = sheet.getRange(2, 14, r - 1);
var searchTerm = range.getValues();
var output = [];
Logger.log(searchTerm)
for (i = 0; i < searchTerm.length; i++) {
var files = DriveApp.searchFiles('title contains'+ searchTerm[i]);
while (files.hasNext()) {
var file = files.next();
var url = file.getUrl();
Logger.log(url)
output.push(url);
Logger.log(output)
}
sheet.getRange(2, 15, output.length).setValue(output);
}
}
上面的代码给出了错误Invalid argument:query(第14行,文件“CurrentFiddle”)。这与代码的findNext()部分有关。
除此之外,似乎到目前为止的其余代码似乎都有效。我有一种潜在的怀疑,它与在searchFiles()部分内迭代搜索词的数组有关。
任何能够为这种情况带来光明的信息都将受到极大的赞赏。
答案 0 :(得分:0)
为此,您可以使用此method来获取工作表的最后一行。
sheet.getLastRow()
然后使用此[getRange(row, column, numRows)][2]
因此您将范围视为2D数组。您可以遍历每一行并获取文件名并添加网址。
因此,在为每个文件创建url后,您可以将它们保存在一个数组中并仅将表单(仅添加url到列)更新一次(如果文件名与Drive中的一个文件匹配)。
希望有所帮助!
答案 1 :(得分:0)
尝试
for (var i=0;i<searchTerms.length;i++) {
var searchTerm = searchTerms[i].toString();
var files = DriveApp.searchFiles("title contains '"+searchTerm.replace("'","\\'")+"'");
while (files.hasNext()) {
var file = files.next();
var url = file.getUrl();
Logger.log(url);
output.push(url);
}
}