使用脚本,我复制活动文件并将其保存在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
类