【发布时间】:2017-11-14 12:50:52
【问题描述】:
我正在尝试通过编写脚本来增加我的 Google 知识,并且我研究了高低以找到解决我的情况的方法,但无济于事。
我有一个用作模板的 Google 表格。打开原始文件时,我想启动一个对话框以输入学生 ID#。此数字将传递到模板中的指定单元格,这会导致工作表中的一些自动填充单元格(使用电子表格功能)。填充单元格后,我想制作具有特定命名结构的文件副本并将其存储在 Google Drive 中的指定文件夹中。最后,我希望该新文件在新窗口中打开以进行进一步编辑。
到目前为止,我可以让对话框弹出 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();
}
非常感谢您在拨入此工作流程方面的任何帮助(我已经完成了大部分工作,我只是将其包括在内,以便您了解我的整体需求):
- 用于捕获学生 ID 的用户界面对话框(已完成,但可以使用清理建议)
- 将 ID 传递给单元格 Y4,将当前日期传递给单元格 C5(完成...只是为了了解总体需求而包含在内)
- 复制原始文件并将其重命名为“姓氏,名字 - StuID - 年级 - 日期并存储在 Google 云端硬盘中的指定文件夹中(完成...只是为了了解整体需求而包含在内)
- 需要 -- 在浏览器的新选项卡中打开新创建的文件,而不运行附加的脚本(理想情况下,如果可能,脚本不会包含在副本中)
- 奖励积分在 Google 脚本中使用 HtmlService 重新创建 UI 的任何帮助,因为 UI 服务已被弃用,并且功能可能会在我弄清楚这一切的那一刻消失。李>
在此先感谢您对这项艰巨任务的任何帮助。
【问题讨论】:
-
ui 服务不会消失。您不能自动打开新的电子表格,而是必须创建一个锚点并要求用户单击它。至于其他问题,请关注每个帖子的一个问题。
-
@Adam 的问题中引用的 UiApp 已弃用。
标签: javascript html google-apps-script