慕沐林林
获取电子表格URL您的代码将面临的问题之一是,随着添加更多的url,newrow不会改变,实际上,您实际上希望文件名旁边的url不在列表的末尾。此函数将vA1 [i] [0]中的文件名放入urls列,即vA2 [i] [0],它还会计算每个名称的文件数并记录信息并在对话框中显示在功能的末尾,从而使您有机会确保获得正确的文件。如果您习惯于存储文件备份,则会发生这种情况。还可以考虑将对话框放入循环中,从而让您选择要保存的对话框,但这需要您在函数运行时进行观察。function spreadsheetUrl() { var ss=SpreadsheetApp.getActive(); var sh=ss.getSheetByName('Page1'); var rg1=sh.getRange(2,1,sh.getLastRow(),1); var rg2=sh.getRange(2,2,sh.getLastRow(),1); var vA1=rg1.getValues();//Spreadsheet Names var vA2=rg2.getValues();//Urls var xf=[]; for(var i=0;i<vA1.length;i++) { if(vA1[i][0]) { var files=DriveApp.getFilesByName(vA1[i][0]); var n=0; while (files.hasNext()){ var file = files.next(); if(n==0) { vA2[i][0]=file.getUrl(); }else{ xf.push({name:file.getName(),url:file.getUrl(),id:file.getId()}); } n++; } } } rg2.setValues(vA2); var html='<h1>You have additional files with the same names</h1>'; if(xf.length) { for(var i=0;i<xf.length;i++) { html+=Utilities.formatString('<br />Name: %s Url: %s Id: %s',xf[i].name, xf[i].url,xf[i].id); } html+='<br /><input type="button" value="Exit" onClick="google.script.host.close();" />'; var userInterface=HtmlService.createHtmlOutput(html).setWidth(1000); SpreadsheetApp.getUi().showModelessDialog(userInterface, "Files with Identical Names") }}通过Dailog进行更改我对此进行了一些尝试,当有多个给定名称的文件时,该版本允许您修改发布的网址。它是在循环的最后而不是在循环的中间进行的,因此您不必在循环运行时执行多次。此版本还具有用于将更改写入工作表服务器端的附带功能。function spreadsheetUrl() { var ss=SpreadsheetApp.getActive(); var sh=ss.getSheetByName('Page1'); var rg1=sh.getRange(2,1,sh.getLastRow(),1); var rg2=sh.getRange(2,2,sh.getLastRow(),1); var vA1=rg1.getValues();//Spreadsheet Names var vA2=rg2.getValues();//Urls //rg2.clearContent();//debug var xf=[]; for(var i=0;i<vA1.length;i++) { if(vA1[i][0]) { var files=DriveApp.getFilesByName(vA1[i][0]); var n=0; while (files.hasNext()){ var file = files.next(); if(n==0) { vA2[i][0]=file.getUrl(); }else{ xf.push({name:file.getName(),url:file.getUrl(),id:file.getId(),row:i+2}); } n++; } } } rg2.setValues(vA2); var html='<h1>You have additional files with the same names</h1>'; html+='<br />Change them if you wish by select the select Me button for the appropriate selection.'; html+='<br />Press close when you done.'; if(xf.length) { for(var i=0;i<xf.length;i++) { html+=Utilities.formatString('<br />Name: %s Id: %s<input type="button" value="Select Me" onClick="selectMe(\'%s\',%s);" />',xf[i].name,xf[i].id,xf[i].url,xf[i].row); } html+='<br /><input type="button" value="Exit" onClick="google.script.host.close();" />'; html+='<script>function selectMe(value,row){console.log(value);console.log(row);google.script.run.selectMe("Page1",value,row);}console.log("My Code");</script>'; var userInterface=HtmlService.createHtmlOutput(html).setWidth(400).setHeight(300); SpreadsheetApp.getUi().showModelessDialog(userInterface, "Files with Identical Names") }}function selectMe(sheetname,value,row) { var ss=SpreadsheetApp.getActive(); var sh=ss.getSheetByName(sheetname); var rg=sh.getRange(row,2).setValue(value);}