Google Sheets, заполняйте данные из листа формы в указанные c ячейки на других листах - PullRequest
0 голосов
/ 04 марта 2020

Я новичок в программировании в целом (кроме опыта работы с MATLAB, который, я думаю, не считается), но я начинаю с попытки кодирования в API Google Sheets для некоторых расширенных функций.

Код, который я пытаюсь написать, предназначен для электронной таблицы, в которой я отслеживаю все расходы на машину. В настоящее время я выполняю несколько сложных вычислений для MPG, но не хочу каждый раз находить строку и столбец для ввода даты. Вместо этого я хотел бы, чтобы на одном простом и понятном листе я вводил переменные (приводимые в милях, прокачивал галлоны, цену за галлон, приблизительную сумму MPG от автомобильного компьютера), и он автоматически заполнял другие листы документа этой информацией, когда Я нажимаю «Сохранить», затем очищаю форму, чтобы я мог сделать это снова в следующий раз.

Вот то, что у меня есть.

function submitData() {
var ss        = SpreadsheetApp.getActiveSpreadsheet();
var formSS    = ss.getSheetByName('Fill-Up'); //Form Sheet
var datasheet1 = ss.getSheetByName('Mileage Stats'); //Data Sheet 1
var datasheet2 = ss.getSheetByName('Costs and Savings'); //Data Sheet 2

//Input Values 1
var values1 = [[formSS.getRange('B3').getValue(),
             formSS.getRange('B6').getValue()]];

datasheet1.getRange(datasheet1.getLastRow()+1, 2, 1, 2).setValues(values1);

//Input Values 2
var values2 = [[formSS.getRange('B4').getValue(),
             formSS.getRange('B5').getValue()]];

datasheet2.getRange(datasheet2.getLastRow()+1, 2, 1, 2).setValues(values2);
}

Это работает за исключением двух проблем, которые я еще не удалось решить.

1) Записывает информацию в новую строку внизу страницы, а не в следующую пустую строку.

2) Это не так запись информации в B6 в правильную ячейку. Я хочу, чтобы B3 записывался в столбец B на листе «Статистика по пробегам», и это так, B4 записывается в столбец B в «Расходы и сбережения» так, как я хочу, а B5 записывается в столбец C в «Расходы и сбережения» как Я хочу, но B6 записывается в столбец C в «Статистика пробега», но я хочу это в столбце G и не могу понять, как изменить это с помощью моего текущего кода или любого другого кода, который я могу найти.

Любая помощь, которую кто-либо может оказать, будет потрясающей!

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Ячейки с функциями считаются ячейками данных, поэтому вы вставляете строки внизу листа. Чтобы решить эту проблему, вы можете использовать метод getNextDataCell () для диапазона столбцов без функций (например, ячейка в столбце B), которая возвращает последнюю ячейку с данными для заданного направления. Я протестировал приведенный ниже код и работал над вставкой данных в последнюю строку с данными в столбце B:

function submitData() {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName('Fill-Up'); //Form Sheet
  var datasheet1 = ss.getSheetByName('Mileage Stats'); //Data Sheet 1
  var datasheet2 = ss.getSheetByName('Costs and Savings'); //Data Sheet 2

  //Input Values 1
  var values1 = [[formSS.getRange('B3').getValue(),
                  formSS.getRange('B6').getValue()]];
  var lastRowInB = datasheet1.getRange("B6").getNextDataCell(SpreadsheetApp.Direction.DOWN).getLastRow();
  datasheet1.getRange(lastRowInB+1, 2, 1, 2).setValues(values1);

  //Input Values 2
  var values2 = [[formSS.getRange('B4').getValue(),
                  formSS.getRange('B5').getValue()]];
  lastRowInB = datasheet1.getRange("B7").getNextDataCell(SpreadsheetApp.Direction.DOWN).getLastRow();
  datasheet2.getRange(lastRowInB+1, 2, 1, 2).setValues(values2);
}
0 голосов
/ 05 марта 2020

Используете ли вы какие-либо ArrayFormulas на листах, которые вы пытаетесь использовать getLastRow()? Если это так, ArrayFormula добавит данные в ячейки для всего диапазона.

Возможно, вы захотите использовать метод Sheet.appendRow(), как показано ниже, и удалите все пустые строки в ваших таблицах данных. appendRow() добавит новую строку внизу листа с данными, переданными методу.

    datasheet1.appendRow(values1);

    datasheet2.appendRow(values2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...