我正试图通过编写脚本来提高我的Google知识,并且我已经研究了高低,以便解决我的情况无济于事。
我有一张用作模板的Google表格。打开原始文件时,我想启动一个对话框来输入学生ID#。此数字将传递到模板中的指定单元格,这会在工作表中生成一些自动填充的单元格(使用电子表格函数)。填充单元格后,我想制作具有特定命名结构的文件副本,并将其存储在Google云端硬盘中的指定文件夹中。最后,我希望在新窗口中打开该新文件以进行进一步编辑。
到目前为止,我可以弹出ID#的对话框,我可以将该号码传递给工作表,我可以制作模板的副本并相应地重命名。
我不能做的是让新文件在新标签页中自动打开。我还需要新文件才能运行" onOpen"脚本。
以下是我迄今为止所做的每一项努力。
下面的代码会创建一个对话框,用于输入学生ID并将其传递到工作表到指定的单元格:
function BuildUI() {
var app = UiApp.createApplication();
app.setTitle('Make a Copy - Please enter the Student ID# below:');
var panel = app.createVerticalPanel();
var textBox = app.createTextBox();
textBox.setName('stuId').setId('StudentID');
var button = app.createButton('Submit');
panel.add(textBox);
panel.add(button);
var clickHandler = app.createServerClickHandler('responses');
button.addClickHandler(clickHandler);
clickHandler.addCallbackElement(panel);
app.add(panel);
var doc = SpreadsheetApp.getActive();
doc.show(app);
}
function responses(e){
var app = UiApp.getActiveApplication();
var textBoxValue = e.parameter.stuId;
var sheet = SpreadsheetApp.getActiveSheet();
var studentID = sheet.getRange('Y4').setValue(textBoxValue);
var dateToday = sheet.getRange('C5').setValue(new Date());
return app.close();
}
以上代码适用于我需要它做的事情。我只提供它以供参考(以及清理它的建议;)
下一个代码块会使用新值复制文件,将其重命名,并将其保存到Google云端硬盘中的指定文件夹中。再说一次......这对我有用,但我把它作为参考和建议:
function makeCopy(){
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var firstName = sheet.getRange('O4').getDisplayValue();
var lastName = sheet.getRange('E4').getDisplayValue();
var date = sheet.getRange('C5').getDisplayValue();
var stuId = sheet.getRange('Y4');
var grade = sheet.getRange('AH4').getDisplayValue();
var fileName = (lastName+ ", " +firstName+ " - " +stuId+ " - Grade " +grade+ " - " +date);
var destFolder = DriveApp.getFolderById('folderID');
destFolder.setSharing(DriveApp.Access.DOMAIN_WITH_LINK, DriveApp.Permission.VIEW);
DriveApp.getFileById(sheet.getId()).makeCopy(fileName, destFolder);
}
最后,我的onOpen函数将这一切串起来(加上另一个函数),以便在模板打开后立即运行:
function onOpen(){
clearCells(); //Clear all content left behind by last editor
BuildUI();
makeCopy();
}
非常感谢任何帮助实现此工作流程的帮助(我已经完成了大部分工作,我只是将其包含在内,以便您了解我的整体需求):
提前感谢您提供有关此订单的任何帮助。
答案 0 :(得分:0)
您可以使用
捕获makeCopy()
中的Google文件对象
gFile = DriveApp.getFileById(sheet.getId()).makeCopy(fileName, destFolder);
return gFile;
然后添加此功能以打开新工作表:
function openNewSheet(gFile) {
var spreadsheetId = gFile.getId();
var url = "https://docs.google.com/spreadsheets/d/"+spreadsheetId;
//SpreadsheetApp.getUi().alert('url is ' + url);
var html = "<script>window.open('" + url + "');google.script.host.close();</script>";
var userInterface = HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(userInterface, "Open Sheet");
}
最后,您可以将openNewSheet()
添加到onOpen()