复制"Model"电子表格并通过谷歌脚本打开副本



使用脚本,我复制活动文件并将其保存在google Drive上的特定文件夹中。然后,我尝试打开新文件。使用以下代码可以很好地创建新文件,但之后不会发生任何事情。。。

function copy(){
nom=Browser.inputBox("Nom du magasin ?")
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var destFolder = DriveApp.getFoldersByName("Tests").next();
DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder);
SpreadsheetApp.open(destFolder.getFilesByName(nom).next());
}

你想打开我的新文件而不是第一个吗?非常感谢!

不可能让谷歌脚本在浏览器中打开工作表,因为如果没有用户的一些交互,javascript就无法打开选项卡。

您可以获得新工作表的ID,并使用HTML Service显示一个链接,该链接将在新选项卡中打开工作表。

function makeAcopy() {
var nom = 'New sheet test'
var sheet = SpreadsheetApp.openById('--- --- --- ')
var destFolder = DriveApp.getFoldersByName("--- --- ---").next();
var fileID = DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder).getId();
var htmlOutput = HtmlService
.createHtmlOutput('<a href="https://docs.google.com/spreadsheets/d/' + fileID + '/" target="_blank">' + nom + '</a>')
.setWidth(350) //optional
.setHeight(50); //optional
SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Click to open sheet');
}

如果原始工作表在浏览器中打开,那么您可以获取新电子表格的URL,构建一个html链接,将其放入对话框中,打开对话框,在对话框打开时运行代码,单击链接,然后关闭对话框。所以,这不是一个容易的过程,但它是可能的。

非常感谢James D!我在这里还发现了一个"完整选项"代码:

我的完整代码如下:

function openUrl( url ){
var html = HtmlService.createHtmlOutput('<html><script>'
+'window.close = function(){window.setTimeout(function(){google.script.host.close()},9)};'
+'var a = document.createElement("a"); a.href="'+url+'"; a.target="_blank";'
+'if(document.createEvent){'
+'  var event=document.createEvent("MouseEvents");'
+'  if(navigator.userAgent.toLowerCase().indexOf("firefox")>-1){window.document.body.append(a)}'                          
+'  event.initEvent("click",true,true); a.dispatchEvent(event);'
+'}else{ a.click() }'
+'close();'
+'</script>'
// Offer URL as clickable link in case above code fails.
+'<body style="word-break:break-word;font-family:sans-serif;">Failed to open automatically. <a href="'+url+'" target="_blank" onclick="window.close()">Click here to proceed</a>.</body>'
+'<script>google.script.host.setHeight(40);google.script.host.setWidth(410)</script>'
+'</html>')
.setWidth( 90 ).setHeight( 1 );
SpreadsheetApp.getUi().showModalDialog( html, "Opening ..." );
}
function creationMatriceMag(){
nom=Browser.inputBox("Nom du magasin ?")
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var destFolder = DriveApp.getFoldersByName("Tests").next();
DriveApp.getFileById(sheet.getId()).makeCopy(nom, destFolder);
var newFile=SpreadsheetApp.open(destFolder.getFilesByName(nom).next());
idNewFile=newFile.getId();
openUrl('https://docs.google.com/spreadsheets/d/'+idNewFile+'/');

}

答案:

您的代码是正确的,除了需要将打开的文件分配给变量。SpreadsheetApp.open()实际上并没有在浏览器中打开文件,而是将其作为文件对象打开,以便在应用程序脚本中进行处理

更多信息:

SpreadsheetApp.open()方法的文档用方法的返回类型对此进行了解释

返回电子表格--电子表格

这是一个电子表格对象,SpreadsheetApp可以使用和读取该对象进行脚本内处理。

您需要将文件分配给一个变量,例如:

var file = SpreadsheetApp.open(destFolder.getFilesByName(nom).next());

从这里,您可以使用file.getSheets()file.setCurrentCell()等方法按需要编辑图纸。

参考文献:

  • 方法SpreadsheetApp.open()
  • Spreadsheet

最新更新