- 您想从 HTML 端创建新的电子表格。
- 您希望将值从 HTML 端放入创建的电子表格中。
- 在您的情况下,您不想将
writeData() 放入createSpreadsheet()。也就是说,您希望单独使用这两个函数。
如果我的理解是正确的,那么这个答案呢?请认为这只是几个答案之一。
首先修改点如下。
修改点:
当你如下运行脚本时,
google.script.run.createSpreadsheet(name);
google.script.run.writeData(data);
writeData() 的函数在createSpreadsheet() 的函数完成之前运行,因为google.script.run 是通过异步进程工作的。为了避免这种情况,在这个示例脚本中,使用了withSuccessHandler()。
关于修改后的脚本,我介绍两种模式。请选择其中一项。
模式一:
在此模式中,文件 ID 从 createSpreadsheet() 返回,并使用文件 ID 将值放入创建的电子表格中。
Code.gs:Google Apps 脚本
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);
}
index.html:HTML 和 Javascript
<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>
模式 2:
在此模式中,文件 ID 由 PropertiesService 保存,并使用从 PropertiesService 获得的文件 ID 将值放入创建的电子表格中。在这种情况下,文件 ID 将保存到 PropertiesService。因此,创建的电子表格也可以通过使用从 PropertiesService 获取的文件 ID 用于 Javascript 的其他操作。
Code.gs:Google Apps 脚本
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);
}
index.html:HTML 和 Javascript
<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>
参考资料:
如果我误解了你的问题并且这个答案不是你想要的,我深表歉意。