You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Google Sheet模态对话框输入值无法写入表格

Google Sheets模态对话框无法写入数据的修复方案

你的代码逻辑没问题,但有两个关键细节错误导致数据无法写入:

错误1:误用setValues()方法

setValues()需要传入二维数组(对应多行多列范围),而你是给单个单元格赋值,应该用setValue()(单个值)。

错误2:缺少表单提交后的反馈与对话框关闭

提交后没有处理成功回调,不仅看不到结果,对话框也不会自动关闭,容易误以为操作没生效。

修改后的Code.gs代码

//@OnlyCurrentDoc

function onOpen() {
  SpreadsheetApp
    .getUi()
    .createMenu("Add Session")
    .addItem("Add Session", "showAddSessionDialog")
    .addToUi();
}

function showAddSessionDialog() {
  var widget = HtmlService.createHtmlOutputFromFile("sessionForm.html");
  SpreadsheetApp.getUi().showModalDialog(widget, "Add Session"); 
}

function insertSessionFromFormSubmit(form) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");
  var activeCell = sheet.getActiveCell();
  var sRow = activeCell.getRow();
  var sCol = activeCell.getColumn();

  var sessRange = sheet.getRange(sRow, sCol);
  var priRange = sheet.getRange(sRow + 1, sCol);
  var secRange = sheet.getRange(sRow + 1, sCol + 1);

  // 单个单元格用setValue,而非setValues
  sessRange.setValue(form.session);
  priRange.setValue(form.pTrainer);
  secRange.setValue(form.sTrainer);
  
  // 返回成功标记,给前端回调用
  return "success";
}

修改后的sessionForm.html代码

<!DOCTYPE html>
<html>
<head>
  <base target="_top">
  <script>
    function submitForm() {
      google.script.run
        .withSuccessHandler(function() {
          // 成功后关闭对话框
          google.script.host.close();
        })
        .insertSessionFromFormSubmit(document.getElementById("sessionForm"));
    }
  </script>
</head>
<body>
  <div id="form">
    <form id="sessionForm">
      <label for="session">Enter session:</label>
      <input type="text" id="session" name="session"><br><br>
      <label for="pTrainer">Enter primary trainer:</label>
      <input type="text" id="pTrainer" name="pTrainer"><br><br>
      <label for="sTrainer">Enter secondary trainer:</label>
      <input type="text" id="sTrainer" name="sTrainer"><br><br>
      <input type="button" value="Submit" onclick="submitForm();">
    </form>
  </div>
</body>
</html>

额外优化点

  • 简化了priRange的列参数(sCol + 0直接写成sCol)
  • 给表单提交加上了成功回调,自动关闭对话框,提升交互体验

内容的提问来源于stack exchange,提问作者amb ustar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:09:55