Скрипт листов: кнопка активирована, копирует данные из ячейки на лист, затем очищает диапазон данных - PullRequest
0 голосов
/ 16 мая 2018

Я довольно хорошо использую формулы с листами Google, чтобы выполнить значительный объем работы. Однако сейчас я обнаружил, что мне нужна система, которая «работает на кнопках», и сценарии - это то, над чем я только начинаю баловаться.

Я пытаюсь создать скрипт, который будет читать содержимое ячейки (D2) на листе с именем «Страница тестера» и дублировать ячейку D2 на отдельном листе в том же документе. После копирования мне понадобится очистить лист B5: B16 и D5: d16 на странице «Тестер». Данные в этих двух диапазонах выбираются из раскрывающихся меню с использованием проверки данных.

Последний кикер - это то, что его нужно активировать кнопкой.

Итак, в моих первых попытках я сейчас пытаюсь скопировать данные из ячейки D2 и просто добавить их внизу страницы. Не работает Любая помощь на этом или других этапах будет огромной. Вот что у меня есть:

function addProduct() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tester Page');
var value = sheet.getRange(2,4)
sheet.appendRow(value);
}

Редактировать Итак, я запустил скрипт (в том числе с помощью нажимаемой кнопки). Все шло хорошо, пока мы не решили внести некоторые изменения в работу страницы. Вместо того, чтобы копировать содержимое 1 ячейки на вторую страницу (называемую «Транзакции»), мы решили, что хотим получить всю строку данных (строка 22). Я добавил свой скрипт, как он есть сейчас, который будет копировать одну ячейку 20 раз ... а не строку из 20 столбцов. Я действительно хотел бы весь ряд, а не только 20 столбцов, но не могу понять это.

function mainThing() {
//get content
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tester Page');
var cell = sheet.getRange(22,1).getValues();

//copy content
var destination = ss.getSheetByName('Transactions');//whatever page
var destCell = destination.getRange(2, 1, 1, 20)
destCell.setValue(cell);

//Add clean row
var add = ss.getSheetByName('Transactions')
add.insertRowBefore(2)

Еще раз спасибо за помощь. Вы, ребята, потрясающие.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

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

Вот оно во всей красе:

function mainThing() {
//get content
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Store Page');
var cell = sheet.getRange("A22:Z22").getValues();

//copy content
var destination = ss.getSheetByName('Transactions');//whatever page
var destCell = destination.getRange("A3:Z3");
destCell.setValues(cell);

//Add clean row
var add = ss.getSheetByName('Transactions')
add.insertRowBefore(3)


//clear content
clearThis("C5:C16");
clearThis("E5:E16");
clearThis("C2");
}



//content clearer
function clearThis(range){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('Store Page');
 var theRange = sheet.getRange("C5:C16");
 var theRange2 = sheet.getRange("E5:E16");
 var theRangeName = sheet.getRange(2, 3);
 theRange.clearContent();
 theRange2.clearContent();
 theRangeName.clearContent();
}
0 голосов
/ 16 мая 2018

Исходя из изменений, было бы что-то вроде этого ...

function mainThing() {
  //get content
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Tester Page');
  var lastCol = ss.getLastColumn();//get last column in the ss
  var cell = sheet.getRange(2, 1, 1, lastCol).getValues(); //get contents of row

  //copy content
  var destination = ss.getSheetByName('Transactions');
  var destRange = destination.getRange(2, 1, 1, lastCol);
  destination.insertRowBefore(2);
  destRange.setValues(cell);

  //clear content
  clearThis("B5:B16");
  clearThis("D5:D16");
}



//content clearer
function clearThis(range){
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName('Tester Page');
   var theRange = sheet.getRange(range);
   theRange.clearContent();  
}

//straight from https://developers.google.com/apps-script/guides/menus

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('Do Magic')
      .addItem('Presto', 'mainThing')      
      .addToUi();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...