我想编写一个应用程序,该应用程序会在Google驱动器中使用用户输入的数据以及google-app脚本在电子表格中生成电子表格。
为此,我有几个JavaScript函数要一个接一个地执行:
function createSpreadsheet(name){
var ss=SpreadsheetApp.create(name);
var ssID = ss.getID()
}
function writeData(data){
var s = ss.getSheets()[0];
s.getRange('A1').setValue(data);
}
由前端脚本通过以下方式调用:
<script>
function parse_to_backend(){
var name = document.getElementById("user_name").value;
var data = document.getElementById("user_data").value;
google.script.run.createSpreadsheet(name);
google.script.run.writeData(data);
};
</script>
如何实现writeData知道ssID电子表格的ID (我无法使用google.script.run将值返回到前端并将其解析为参数)?
答案 0 :(得分:4)
writeData()
放在createSpreadsheet()
中。即,您要分别使用这两个功能。如果我的理解正确,那么这个答案如何?请认为这只是几个答案之一。
首先,修改点如下。
按以下方式运行脚本时,
google.script.run.createSpreadsheet(name);
google.script.run.writeData(data);
writeData()
的功能在createSpreadsheet()
的功能完成之前运行,因为google.script.run
由异步进程工作。为了避免这种情况,在此示例脚本中,使用了withSuccessHandler()
。
关于修改后的脚本,我介绍2种模式。请选择其中之一。
在这种模式下,文件ID从createSpreadsheet()
返回,并使用文件ID将值放入创建的电子表格中。
function createSpreadsheet(name){
var ss = SpreadsheetApp.create(name);
var ssID = ss.getId();
return ssID;
}
function writeData(id, data){
var ss = SpreadsheetApp.openById(id);
var s = ss.getSheets()[0];
s.getRange('A1').setValue(data);
}
<script>
function parse_to_backend(){
var name = document.getElementById("user_name").value;
var data = document.getElementById("user_data").value;
google.script.run.withSuccessHandler((id) => {
google.script.run.writeData(id, data);
}).createSpreadsheet(name);
};
</script>
在此模式下,文件ID由PropertiesService保存,并使用从PropertiesService获得的文件ID将值放入创建的电子表格中。在这种情况下,文件ID将保存到PropertiesService。因此,使用从PropertiesService获得的文件ID,创建的Spreadsheet也可以由Javascript的其他操作使用。
function createSpreadsheet(name){
var ss = SpreadsheetApp.create(name);
var ssID = ss.getId();
PropertiesService.getScriptProperties().setProperty("ssID", ssID);
}
function writeData(data){
var id = PropertiesService.getScriptProperties().getProperty("ssID");
var ss = SpreadsheetApp.openById(id);
var s = ss.getSheets()[0];
s.getRange('A1').setValue(data);
}
<script>
function parse_to_backend(){
var name = document.getElementById("user_name").value;
var data = document.getElementById("user_data").value;
google.script.run.withSuccessHandler(() => {
google.script.run.writeData(data);
}).createSpreadsheet(name);
};
</script>
如果我误解了您的问题,而这个答案不是您想要的,我表示歉意。