Как мне получить .getValues ​​и .setValues ​​из нескольких ячеек в одном столбце? - PullRequest
0 голосов
/ 02 августа 2020

У меня есть код, который извлекает значения из определенных ячеек в столбце D из «Ввести общие расходы» в зависимости от того, сколько свойств отмечено в столбце F, где адрес свойства отображается в столбце 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);
    }}

Это результат с текущим кодом

Я хочу, чтобы результаты были такими

1 Ответ

0 голосов
/ 10 августа 2020

Решение

Вы должны изменить эту строку кода:

//...

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

//...

Вы помещаете каждое имя свойства в то, что будет значением одной ячейки. Это недопустимая операция, и в качестве побочного эффекта только первое значение этого диапазона вставляется в соответствующий диапазон с помощью этой операции:

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

При этом первое значение является содержимым ячейки G4, т.е. «10 Gordon Ridge».

Предлагаемая модификация

Вместо этого вы должны l oop через значения столбца G и вставлять соответствующее значение только при установленном флажке.

Для этого вы можете просто установить в качестве переменной индекс строки при извлечении значений столбца G:

//... 

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

//...

Примечание: имейте в виду, что в Javascript массивах первый индекс равен 0, а в таблице Google Нотация A1 равна 1. Это означает, что вам нужно увеличить индекс l oop на 1, чтобы получить соответствующий индекс строки в нотации A1.

Ссылка

Диапазон классов приложения для электронных таблиц

...