скрипт для ввода данных в следующую пустую ячейку

#google-apps-script #google-sheets

#google-apps-script #google-таблицы #google-sheets

Вопрос:

Медленно пробиваюсь к пониманию JavaScript и таких вариаций, как GAS, но полный новичок.

У меня есть скрипт, который при выполнении копирует формулу в виде значений и вставляет ее в другую ячейку. Своего рода функция архивирования.

 function csArchive() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var origin = ss.getRange('sheet1!D17');
  origin.copyTo(ss.getRange('sheet1!Z2'), {contentsOnly: true});
  

Другими словами, скрипт выполняет:
1. скопируйте с активного листа и указанного диапазона.
2. Вставьте в указанный диапазон (z2).
чего здесь не хватает — проверьте, пусто ли значение z2, и если это не так, спускайтесь вниз, пока не найдете пустую ячейку, затем вставьте значение.

Я верю, что мое спасение — с .getLastRow() , но, хоть убей, я не могу заставить это работать должным образом. Заранее благодарю вас!

Комментарии:

1. Следующая пустая ячейка где?

Ответ №1:

Последняя строка в столбце Z в ActiveSheet

 function getColumnHeight(col,sh,ss){
  var ss=ss || SpreadsheetApp.getActive();
  var sh=sh || ss.getActiveSheet();
  //var col=col || sh.getActiveCell().getColumn();
  var col = col || 26;
  var rg=sh.getRange(1,col,sh.getLastRow(),1);
  var vA=rg.getValues();
  while(vA[vA.length-1][0].length==0){
    vA.splice(vA.length-1,1);
  }
  return vA.length;
}
  

Пример того, как использовать это:

 function csArchive() {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getActiveSheet();
  var origin = sh.getRange('sheet1!D17');
  origin.copyTo(sh.getRange(getColumnHeight(26) 1,26), {contentsOnly: true});
  //origin.copyTo(sh.getRange(getColumnHeight() 1,26), {contentsOnly: true});//You can also do it this way since I defaulted col parameter to 26
}
  

Вы хотите сказать, что у вас есть что-то вроде этого:

введите описание изображения здесь

Предполагая, что вы не позволите этому диапазону заполняться:

 function getNextEmptyCell(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getRange(1,26,54,1);
  var vA=rg.getValues();
  while(vA[vA.length-1][0].length==0){
    vA.splice(vA.length-1,1);
  }
  return vA.length   1;
}

function csArchive() {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getActiveSheet();
  var origin = sh.getRange('sheet1!D17');
  origin.copyTo(sh.getRange(getNextEmptyCell(),26), {contentsOnly: true});
}
  

Комментарии:

1. Это работает. Небольшое предостережение — я хотел использовать следующую доступную (пустую) ячейку, так как у меня есть функция суммирования после 55 ячеек. У меня есть 3 варианта: 1. переместить формулу суммы вверху. 2. Переместите формулу в другое место. 3. Измените код. Если у вас есть предложения по # 3, я весь внимание. В любом случае спасибо вам за вашу помощь!

2. Обратитесь к моему ответу с изображением и, пожалуйста, ответьте на вопрос.

3. Извините. Я несколько раз менял изображение.

4. Если это так, я бы переместил его наверх или, по крайней мере, куда-нибудь за пределы этого столбца. Это можно было бы сделать, но вам придется сказать мне, где находится дополнительный материал и что делать, если все это заполнится. Поэтому для простоты я бы просто переместил его.

5. Да, ваше изображение точное. У Z1 есть заголовок, Z2-55 пустые и для использования скриптом, у z56 есть формула. Ваш код игнорирует любые пустые ячейки между say… z5 и z56 и записывает под формулой суммы — (z57 для меня, z18 на вашем изображении).