Записывать данные в ячейку в последней строке с текстом (вместо appendRow)

Я использую ярлыки Siri для ввода данных с помощью скриптов Google в таблицу Google. Я нашел способы добавить данные, но он использовал appendRow, который добавляет данные в новую строку.

Я запускаю 2 сценария, один из которых добавляет данные в первые три столбца новой строки.

Я хочу, чтобы следующий скрипт записывал данные в следующие 2 столбца, вместо того, чтобы начинать с новой строки, но я понятия не имею, как это сделать.

Я понятия не имею, что делаю, я новичок в программировании, поэтому искренне сожалею о всех проблемах.

Я искал и наткнулся на сценарии, чтобы найти последнюю строку, содержащую данные, но я не знаю, как добавить в нее данные.

Я нашел эту страницу, но до сих пор понятия не имею: Определение последней строки в одном столбце

Это код, который я использую для добавления данных в первые 3 столбца новой строки:

var ss = SpreadsheetApp.openById("").getSheetByName('');


function doGet(e) {

  var mood = JSON.parse(e.parameters.mood)

  var formattedTime = Utilities.formatDate(new Date(), "GMT+530", "h:mm a");
  var formattedDate = Utilities.formatDate(new Date(), "GMT+530", "MM/dd/yyyy");

 ss.appendRow([formattedDate,formattedTime,mood]);

}

person Mia    schedule 25.05.2019    source источник
comment
Похоже, ваш вопрос подразумевает, что вы думаете, что appendRow () не будет обрабатывать текст. Это не так. Он просто не копирует форматирование.   -  person Cooper    schedule 26.05.2019


Ответы (1)


Есть разные способы добиться того, что вам нужно, один из них - создать настраиваемую функцию, которая вставляет данные в последнюю строку на листе:

/**
 * Gets Sheet by its name from a Spreadsheet (by id);
 * @param {String} id Spreadsheet's id;
 * @param {String} name Sheet name;
 * returns {Sheet} this sheet;
 */
function getSheet(id,name) {
  var ss = SpreadsheetApp.openById(id);
  var sh = ss.getSheetByName(name);
  return sh;      
}

//test function;
function testInsert() {
  var sh = getSheet('yourSpreadsheetId','yourSheetName');
  var data = [1,2,3,4,5,7]; //an array of values;
  insert(sh,data,1);
}

/**
 * Inserts values to the last row;
 * @param {Sheet} sheet to use;
 * @param {Array} array of values to set;
 * @param {Integer} startCol column to start from;
 */
function insert(sheet,data,startCol) {
  var lrow   = sheet.getLastRow();
  var lrange = sheet.getRange(lrow,startCol,1,data.length)
  lrange.setValues([data]);
}
person Oleg Valter    schedule 25.05.2019
comment
Что писать в getSheet()? Я искал, но ничего не нашел. Какая глобальная переменная? - person Mia; 25.05.2019
comment
Глобальная переменная - это та, которую вы определяете вне области действия функции - в вашем примере кода вы пишете свой лист в ss, просто ссылаетесь на него вместо sh (getSheet () может быть любой функцией, которая выбирает и возвращает электронную таблицу) - person Oleg Valter; 25.05.2019
comment
Я обновил ответ примером функции, которая извлекает нужный вам лист - обычно лучше сохранить логику, извлекающую ресурс, в функции, которую вы можете повторно использовать по запросу. - person Oleg Valter; 25.05.2019
comment
Большое спасибо за подробный ответ. Теперь я могу получить значения массива в столбцах, которые мне нравятся ... но как мне добавить ответ JSON в место, где хранится var data = [1,2,3,4,5,7]? Я пробовал исследовать, и они говорили о преобразовании его в 2D-массив ?? Может быть, я должен задать этот другой вопрос? - person Mia; 26.05.2019
comment
Мой код неявно преобразует одномерный массив в двухмерный, поэтому не беспокойтесь об этом. Если я правильно вас понял, просто вызовите insert() внутри вашей doGet() функции с вашим массивом в качестве второго параметра - или вы имеете в виду что-то еще? - person Oleg Valter; 26.05.2019