Google apps script Google表单脚本-驱动整个列的文档搜索循环

Google apps script Google表单脚本-驱动整个列的文档搜索循环,google-apps-script,google-sheets,Google Apps Script,Google Sheets,这些年来,我已经无数次地使用了你们丰富的问题和答案目录,谢谢你们 我一直在冒险进入谷歌表单中的谷歌脚本世界——我是js和脚本方面的新手,请耐心等待 我目前有一个工作表,在连接的Google驱动器中有一列文件名(例如-Images/ImageTEST123.jpg)。我一直在修改一个代码,该代码获取文件名,搜索驱动器,并给出图像本身的URL——见下文 function searchq() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var

这些年来,我已经无数次地使用了你们丰富的问题和答案目录,谢谢你们

我一直在冒险进入谷歌表单中的谷歌脚本世界——我是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);
}
}
函数searchz(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
var r=sheet.getLastRow();
var范围=sheet.getRange(2,14,r-1);
var searchTerm=range.getValues();
var输出=[];
Logger.log(搜索术语)
对于(i=0;i
上面的代码给出了错误无效参数:query(第14行,文件“CurrentFiddle”)。它与代码的findNext()部分相关

除此之外,到目前为止,代码的其余部分似乎都正常工作。我暗自怀疑它与在searchFiles()部分中遍历搜索词数组有关


如果您能提供任何信息来说明这一情况,我们将不胜感激。

为此,您可以使用此选项获得工作表的最后一行

然后使用此
[getRange(row,column,numRows)][2]

所以你得到的范围是2D数组。您可以循环浏览每一行,获取文件名并添加URL

因此,在为每个文件创建url后,您可以将它们保存在一个数组中,并只更新一次工作表(将url添加到列中)(如果文件名与驱动器中的单个文件匹配)

希望有帮助

试试看

 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);
   } 
 }

for(var i=0;i在其他任何事情之前,不应该是.setValue(output)?因为您只是一次又一次地填写上一个文档的url,如果搜索返回多个文档,那么假设第15列为基于第2行的搜索提供了3个url。第3行第15列将包含其中一个url,因此在第3行中搜索值将覆盖它。您需要决定如何保留输出。是否你想把url推到第15列开始的一行吗?@AkshinJalilov,谢谢你的回复!由于文件名复杂,我搜索的项目将只返回一个结果(url)。我可以使用“url”或“输出”目前,由于它只适用于单个搜索。@AkshinJalilov,我正在寻找脚本,以获取第14列中的所有搜索词,然后将相关url返回到第15列中的相邻单元格中。请尝试searchTerm[I].toString();感谢您的回答!我尝试添加了您建议的文本,这会导致错误“在.operator之后缺少名称。”错误-我可能只是有点迟钝,但如果你能澄清这一部分,那将是一个巨大的帮助。除此之外,你的回答告诉我,剩下的代码应该通过修改getRange部分来工作,如果不是这样的话-你有什么办法可以澄清吗?谢谢!
 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);
   } 
 }