使用Google App Script在Google工作表中选择单元格时如何更新HTML文件

s4n0splo  于 2022-12-28  发布在  Go
关注(0)|答案(1)|浏览(105)

我试着在谷歌上搜索一段时间的解决方案,但找不到答案。
我有一个带有HTML文件和脚本的谷歌电子表格,我希望能够选择谷歌工作表中的任何单元格,并将其值直接填充到我的HTML文件中的textarea HTML元素中。
一旦我能够实现这个功能,我将在HTML文件中显示之前修改数据,但这超出了这个问题的范围。
设置如下所示:enter image description here
我在"获取数据"的顶部添加了一个按钮,并使用onclick和google.script.run.withSuccessHandler(请参见下面的代码)来完成这项工作,但是,我希望能够做到同样的事情,而不必每次都点击这个按钮。

<button id="Get Data" onclick="getData()"><b>Get Data</b></button>
<script>
      function getData() {
        google.script.run.withSuccessHandler(updateElement).activeCell();
      }

      function updateElement(values) {
        var column1Value = values[0];
        var column2Value = values[1];
        var column3Value = values[2];

        var column1 = document.getElementById('column1');
        column1.value = column1Value 

        var column2 = document.getElementById('column2');
        column2.value = column2Value 

        var column3 = document.getElementById('column3');
        column3.value = column3Value

        var column4 = document.getElementById('column4');
        column4.value = column3Value

        var doneMessage = document.getElementById('doneMessage');
        doneMessage.innerHTML = ""
      }
</script>
function activeCell(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var rowIndex = sheet.getActiveCell().getRow();
  var column1Value = sheet.getRange(rowIndex, 2).getValue();
  var column2Value = sheet.getRange(rowIndex, 3).getValue();
  var column3Value = sheet.getRange(rowIndex, 4).getValue();

  return [column1Value, column2Value, column3Value]
}

我尝试过使用onmousedown,但它只在将鼠标放在HTML元素上而不是电子表格上时有效,我假设这是因为HTML元素是一个iframe。
我也尝试了onSelectionChange(e),它工作得很好,直到我不知道如何将所选单元格的信息发送到HTML文件。
谢谢你的帮助!

5gfr0r5j

5gfr0r5j1#

如果我正确理解了您要执行的操作,我建议您使用计时器而不是单击来刷新数据

  • 等待页面加载addEventListener("DOMContentLoaded")以执行getData()
  • successHandler()函数中的window.setTimeout()(可以修改持续时间)
<script>
    window.addEventListener("DOMContentLoaded", (event) => {
      console.log("DOM loaded");
      getData();
    });

    function getData() {
      google.script.run.withSuccessHandler(updateElement).getData();
    }

    function updateElement(e) {
      //do stuff
      window.setTimeout(getData, 5*1000); //repeat getData() in 5sec
    }
  </script>

相关问题