如何从单个列中的多个单元格中获取 .getValues 和 .setValues?

How do I .getValues and .setValues from multiple cells in a single column?

我有一个代码,根据在 F 列中勾选的属性数量,从“输入一揽子费用”中提取 D 列中某些单元格的值,其中 属性 地址出现在 G 列中,如果F 已检查。我在选中的属性之间平均分摊费用,响应出现在“一揽子响应”上。如果我检查四个属性和 运行 脚本,我会在“一揽子响应”上得到四个正确数量的响应,但第一个 属性 名称被列出四次而不是每个 属性 名称已检查。就我非常有限的知识而言,我已经采取了这一点,但我不确定如何让每个人 属性 都列在“一揽子回应”中。我觉得它涉及使用 values.foreach 但我无法使其正常工作。请帮忙! :) 这是代码:

function submitDataB() {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Enter Blanket Expenses"); //Form Sheet
  var datasheet = ss.getSheetByName("Blanket Responses"); //Data Sheet
  var dataRange = ss.getRange("B4:H28")
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var checkbox = row[5];
    var values = [[formSS.getRange("G4:G28").getValues(),
                   formSS.getRange("C4").getValue(),
                   formSS.getRange("D5").getValue(),
                   formSS.getRange("D6").getValue(),
                   formSS.getRange("D7").getValue(),
                   formSS.getRange("D8").getValue(),
                   formSS.getRange("D9").getValue(),
                   formSS.getRange("D10").getValue(),
                   formSS.getRange("D11").getValue(),
                   formSS.getRange("D12").getValue(),
                   formSS.getRange("D13").getValue(),
                   formSS.getRange("D14").getValue(),
                   formSS.getRange("D15").getValue()]];

        if (checkbox == 0)
        {
          continue;
        }

            
  datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 13).setValues(values);
    }}

这是当前代码的结果

这就是我想要的结果

解决方案

你要修改这行代码:

//...

var values = [[
    formSS.getRange("G4:G28").getValues(),

//...

您将每个 属性 名称放入将成为单个单元格值的内容中。这不是合法的操作,作为副作用,只有该范围的第一个值被插入到使用此操作的相应范围中:

datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 13).setValues(values);

第一个值是 G4 单元格的内容,即“10 Gordon Ridge”。

建议修改

您应该循环遍历 G 列值,并仅在选中复选框时插入相应的值。

为了实现这一点,您可以在提取 G 列值时简单地将行索引设置为变量:

//... 

var values = [[
    formSS.getRange(`G${i + 1}`).getValue(),

//...

注意:请记住,在 Javascript 数组中,第一个索引是 0,而在 Google Spreadsheet A1 Notation 中是 1。这意味着您必须将循环索引递增 1 以获得A1 Notation中相应的行索引。

参考

Spreadsheet App Class Range