som*_*.py 2 javascript web-applications google-sheets google-apps-script
我想编写一个应用程序,它在我的 google-drive 中生成一个电子表格,其中包含带有 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);
}
Run Code Online (Sandbox Code Playgroud)
前端脚本通过以下方式调用它们:
<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>
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现 writeData 知道 ssID 电子表格的 ID (我无法使用 google.script.run 将值返回到前端并将其解析为参数)?
writeData()在createSpreadsheet()。即,您想单独使用这两个功能。如果我的理解是正确的,这个答案怎么样?请将此视为几个答案之一。
首先,修改点如下。
当您按如下方式运行脚本时,
google.script.run.createSpreadsheet(name);
google.script.run.writeData(data);
Run Code Online (Sandbox Code Playgroud)
的功能writeData()在createSpreadsheet()完成之前运行,因为google.script.run由异步过程工作。为了避免这种情况,在此示例脚本withSuccessHandler()中使用。
关于修改后的脚本,我介绍了两种模式。请选择其中之一。
在此模式中,返回文件 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);
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
在此模式中,文件 ID 由 PropertiesService 保存,并使用从 PropertiesService 获取的文件 ID 将该值放入创建的电子表格中。在这种情况下,文件 ID 将保存到 PropertiesService。因此,使用从 PropertiesService 获取的文件 ID,创建的电子表格也可以由 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);
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
如果我误解了您的问题并且这个答案不是您想要的,我深表歉意。
| 归档时间: |
|
| 查看次数: |
2707 次 |
| 最近记录: |