javascript - 使用脚本将 HTML Web 应用表数据发送回 Google 表格

标签 javascript html dom google-apps-script google-apps

我正在创建一个 Google HTML Web 应用程序,允许多个用户进入并报告他们的信用卡费用。首先,我将原始数据报告粘贴到 Google 电子表格中,然后启动 HTML Web 应用程序,在 HTML 表格中显示用户交易。我还在最后一列中添加了下拉框,以允许用户选择每笔交易的费用类型。

我需要帮助弄清楚如何将用户从下拉列表中选择的数据发送回 Google 表格。我希望当用户单击提交按钮时发回此信息。

这是我到目前为止所拥有的:

index.html

 <? 
  var ss = SpreadsheetApp.openById('myID');
  var HomeSheet = ss.getSheetByName('Home');
  var StoreNum = HomeSheet.getRange(5, 2).getValue();
  var StoreSheet = ss.getSheetByName(StoreNum);
  var data = StoreSheet.getRange('A7:I' + lastRow('A',StoreNum)).getValues();
 ?>
<h2>Location: <?= StoreNum ?></h2>

<button onclick='buttonFunction()'>Submit</button>

<body style='background-color:#cccccc'>
  <table class='myTable' border='1'>
    <th align='center'>Settlement Date</th>
    <th align='center'>Purchase Date</th>
    <th align='center'>Purchase Time</th>
      <? for (var i = 0; i < data.length; i++) { ?>
        <tr>
          <? for (var j = 0; j < data[i].length; j++) { ?>
            <td align='center'>
            <?= data[i][j] ?>
            </td>     
          <? } ?>
            <td align='center'>
              <form>
                <select>
                  <option value="Select Type">Select Type</option>
                  <option value="Food">Food</option>
                  <option value="M&R">M&R</option>
                  <option value="Office Sup">Office Sup</option>
                  <option value="Other">Other</option>
                </select>
              </form>
            </td>  
        </tr>
      <? }?>
  </table>
</body>

代码.gs

function doGet() {
  return HtmlService.createTemplateFromFile('index').evaluate()
}

function include(file) {
  return HtmlService.createHtmlOutputFromFile(file).getContent();
}        

function submitRequest() {
  var table = document.getElementsByClassName('myTable')[0];
  var tableRow = table.rows[1][8];
  var tableContent = tableRow.firstChild.textContent;
  StoreSheet.getRange('D15:D18').setValues(tableContent)
}

我尝试执行上述功能,这是我从某处找到的,但我得到 "document not defined"错误。我很确定这是因为 document.getElementsByTagName需要在 <script> 中调用HTML 文件的格式,但我不太确定从这里开始到哪里,我已经成功地将 Google 表格数据转换为 HTML,但不能向后转换。

这是表格的图像,如果它有助于可视化......我不确定是否应该通过表格或下拉框元素来获取数据。 1]

编辑:已确认工作

(胡安·迭戈的回答)上面的index.html文件

代码.gs:

function setValue(value) {
  var ss = SpreadsheetApp.openById('myID');
  var HomeSheet = ss.getSheetByName('Home');
  var StoreNum = HomeSheet.getRange(5, 2).getValue();
  var StoreSheet = ss.getSheetByName(StoreNum);

  StoreSheet.getRange('E1').setValue(value)
}

脚本.html

<script>

function onSuccess() {
  alert('Your request has ben submitted');
}

function buttonFunction() {
  var Row = document.getElementById("tablerow");
  var Cells = Row.getElementsByTagName("td");
  var cellvalue = (Cells[0].innerText);

  google.script.run.withSuccessHandler(onSuccess).setValue(cellvalue);
}

</script>

最佳答案

submitRequest() 应该在前端并在后端回调发送 HTML 表单数据的函数

查看此 stackoverflow 帖子:How to submit HTML form into a Sheet?

Google 文档 Class google.script.run

这里的想法是将函数放在前端:

<script>
function submitRequest(){
 google.script.run.withSuccessHandler(success).[YOUR_BACKEND_FUNCTION]([YOUR_FORM_VALUES]);
}
</script>

Tha 会在后端给你一个可以处理的对象

关于javascript - 使用脚本将 HTML Web 应用表数据发送回 Google 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42619639/

相关文章:

javascript - 模态滑动和打开

javascript - 如何使用 HTML/javascript 以预定义的顺序加载图像?

java - java中的安全html

javascript - Angular 1.x 对输入字段的关注仅有效一次

javascript - 在 javascript IDE 中而不是在浏览器控制台中测试 DOM 方法

javascript - Webpack 解析导入路径的目录(goCardless 作为样板)

javascript - [Vue 警告] : Property or method "v" is not defined on the instance but referenced during render

jquery - 根据 jQuery 中的输入值更改函数

如果我输入值,Javascript 函数会显示文本

javascript - 空间位置在这些跨度中重要吗?