【问题标题】:set value on sidebar在侧边栏设置值
【发布时间】:2021-09-18 07:50:12
【问题描述】:

我有一张 100 多行的 google 表格,其中的列是“NAME、PLACE、PHONE”。我想更改/更正侧栏中特定人员 Ex.John 的电话号码(Form.html)以及要在我的谷歌表“电话列表”的特定行中编辑的正确位置和电话号码。下面给出的 code.gs 不起作用。你能租用纠正一下吗?

function sidebar() {
  var html = HtmlService.createHtmlOutputFromFile("Form").setTitle('Phone Details');
  SpreadsheetApp.getUi().sidebar(html);
  }

function result(form) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ws = ss.getSheetByName("Phonelist");
  var data = ws.getDataRange().getValues(); 
 
  var name = form.name;
  var place = form.place;
  var phone = form.phone;
 
  for (var i = 1; i < data.length; i++) {
       if(data[i][1] == "John"){
          var result = [name,place,phone];
          ws.getRange(dat[i]).setValue(result); 
        }
      }
   }

【问题讨论】:

  • 你能分享一个简化的电子表格吗?

标签: arrays google-apps-script google-sheets google-sheets-formula


【解决方案1】:

很难理解您到底需要什么。但是有一些问题是可见的。

  1. ws.getRange(data[i])无效。见docs。您至少需要一行一列,在您的情况下,还需要插入范围以来的列数。目前您只有一列。解决办法是`
const startColumn = 1 // start at column A
const numberOfRows = 1 // update one row at a time
const numberOfColumns = result.length // this will be 3
ws.getRange(data[i], startColumn, numberOfRows, result.length)
  .setValues(result) // setValues is correct, setValue is incorrect
  1. 第二个问题是您说 NAME 在第一列,但您的测试是针对第二列进行测试。数组从 0 开始,即第一项实际由 [0] 访问。因此,您的测试 if(data[i][1] == "John") 实际上会检查第二列 PLACE 是否等于“John”。要解决此问题,请将 [1] 替换为 [0],因此:
if(data[i][0] == "John")
  1. 第三个问题在第一个答案中处理。您正在使用setValue(),它仅用于设置一个单元格。但由于您一次要设置多个单元格,因此您应该改用setValues()

【讨论】:

    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2016-02-24
    相关资源
    最近更新 更多