Переместить строку на другой лист на основе значения ячейки - PullRequest
0 голосов
/ 12 мая 2019

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

Я делаю регистрацию на событие.Я хотел бы иметь возможность изменить значение в столбце F, заполнить столбец G временем изменения статуса и перенести данные строки на лист «Посетитель прибыл».

Я полагаю, что скрипт уже делает это, но нужно запустить его вручную.Он также заботится об удалении данных строки в A (событие) после переноса их в B (посетитель прибыл).

Мой вопрос: может кто-нибудь помочь мне настроить его, чтобы скрипт работал непрерывно (включенредактировать), а также выполнить все вышеперечисленное, если я что-то пропустил?

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

Вот лист, на котором я тестирую.

https://docs.google.com/spreadsheets/d/1HrFnV2gFKj1vkw_UpJN4tstHVPK6Y8XhHCIyna9TLJg/edit#gid=1517587380

Вот решение, которое я попробовал придерживаться.Все благодарности Джейсону П и Ритцу за это.

Сценарий Google App - таблицы Google Move Rows эффективно основаны на значении ячейки

Спасибо D:

 function CheckIn() {

// How Many Columns over to copy
var columsCopyCount = 7; // A=1 B=2 C=3 ....

// What Column to Monitor
var columnsToMonitor = 6; // A=1 B=2 C=3 ....

//TARGET SPREAD SHEETS
var target1 = "Attendee Arrived";

//Target Value
var cellvalue = "Attendee Arrived";


//SOURCE SPREAD SHEET
var ss = SpreadsheetApp.openById('1HrFnV2gFKj1vkw_UpJN4tstHVPK6Y8XhHCIyna9TLJg');
var sourceSpreadSheetSheetID = ss.getSheetByName("Event");
var sourceSpreadSheetSheetID1 = ss.getSheetByName(target1);


var data = sourceSpreadSheetSheetID.getRange(2, 1, sourceSpreadSheetSheetID.getLastRow() - 1, sourceSpreadSheetSheetID.getLastColumn()).getValues();

var attendee = [];


for (var i = 0; i < data.length; i++) {

    var rValue = data[i][6];

    if (rValue == cellvalue) {
        attendee.push(data[i]);
    } else { //Fail Safe
        attendee.push(data[i]);
    }
}

if(attendee.length > 0){

sourceSpreadSheetSheetID1.getRange(sourceSpreadSheetSheetID1.getLastRow() + 1, 
1, attendee.length, attendee[0].length).setValues(attendee);
}


//Will delete the rows of importdata once the data is copided to other 
sheets
    sourceSpreadSheetSheetID.deleteRows(2, 
     sourceSpreadSheetSheetID.getLastRow() - 1);
  }

1 Ответ

2 голосов
/ 13 мая 2019

Попробуйте:

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

function checkIn(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!="Event") return;
  if(e.range.columnStart==6) {
    if(e.value=="Attendee Arrived"){
      e.range.offset(0,1).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "M/d/yyyy HH:mm:ss"));
      var row=sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).getValues()[0];
      e.source.getSheetByName("Attendee Arrived").appendRow(row);
      sh.deleteRow(e.range.rowStart);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...