Переместить данные в новые диапазоны - PullRequest
0 голосов
/ 05 сентября 2018

Я нашел и изменил какой-то код, чтобы захотеть, что я хочу, и он работает, но теперь это просто зверь, и я знаю, что есть способ лучше / чище - у нас будет 10-20 рабочих листов в течение дня и я просто не хочу, чтобы это так увязло

У меня есть прикрепленный файл Code.gs, и вот ссылка на страницу Google https://docs.google.com/spreadsheets/d/15j4sdwvQfVUrDbr_35Iof5ZV0peSu3Jm3XlWgkB7CXw/edit?usp=sharing

Часть 1 - Эта часть этого кода должна оставлять отметку времени с адресом электронной почты текущего пользователя и датой и временем в двух столбцах рядом с ним -

function onEdit(event) {

      var s = SpreadsheetApp.getActiveSheet();

//-----------------Your-Sheet 8-----------   

   if( s.getName() == "Your-Sheet 8" ) { //checks that we're on the correct sheet
    var r = s.getActiveCell();

//-----------When data is entered in column F (the 6 column) it will automatically 
//    insert the current users Email in column G and will put a Time-Stamp in column H

    if( r.getColumn() == 8) { //use getRow for row and getColumn for column 
      var nextCell = r.offset(0, 1);//offset (row,column)
      if( nextCell.getValue() === '' ) //is empty?
        nextCell.setValue(Session.getUser());//inserts current users email     
      var nextCell = r.offset(0, 2);//offset (row,column)
      if( nextCell.getValue() === '' ) //is empty?
         nextCell.setValue(new Date());//will only put date, format "123/Date and time" if time needed
    }
  }


//-----------------Your-Sheet 7-----------   
   if( s.getName() == "Your-Sheet 7" ) { 
    var r = s.getActiveCell();

    if( r.getColumn() == 8) { 
      var nextCell = r.offset(0, 1);
      if( nextCell.getValue() === '' ) 
        nextCell.setValue(Session.getUser());
      var nextCell = r.offset(0, 2);
      if( nextCell.getValue() === '' ) 
         nextCell.setValue(new Date());
    }
  }

 So on and so on 
//-----------------Your-Sheet 6-----------     

//-----------------Your-Sheet 5-----------     

//-----------------Your-Sheet 4-----------   

//-----------------Your-Sheet 3-----------   

//-----------------Your-Sheet 2-----------   

//-----------------Your-Sheet 1-----------   

???? ---- Есть ли способ сделать что-то вроде - if (s.getName () == "Все") {- Или Getactivesheet? я просто не уверен ----- ????

Часть 2 - Это зверская часть кода, я очень надеюсь, что есть способ убрать это, сделать его более компактным и работать лучше.

//------------------------------------Move Row to another Sheet--------------------------------------------


    var ss = SpreadsheetApp.getActiveSpreadsheet(); //Checks to see what sheet the user is on 
    var s = event.source.getActiveSheet();
    var r = event.source.getActiveRange();


//---------------Your-Sheet 1 - Moving select Row from "Your-Sheet 1" to desired Sheet--------------  

//  if(s.getName() == "Your-Sheet 1" ---- (checks what sheet the user is on)
//  && r.getColumn() == 15 ---- (This is the Column number that is being looked at i.e. column 13 = Column M)
//  && r.getValue() == "Your-Sheet 7") ---- (the value in this cell determines what or where this data is going) 
    if(s.getName() == "Your-Sheet 1" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 7") {
        var row = r.getRow(); //This is selecting the active row
        var numColumns = s.getLastColumn(); //This tells how many column are in that row that have data i.e. if the last column with data is column "R" there is no need to copy the data all the way to column "Z" 
        var targetSheet = ss.getSheetByName("Your-Sheet 7"); // This is what sheet we want our row of data to be sent to 
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); //This checks to find the last row with data and targets the row below 
        s.getRange(row, 1, 1, numColumns).moveTo(target); // This Copies data to the empty row we just found 
        s.deleteRow(row); // This deletes the row off of the current sheet 
    }

    if(s.getName() == "Your-Sheet 1" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 3") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 3");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }

    if(s.getName() == "Your-Sheet 1" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 4") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 4");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }

    if(s.getName() == "Your-Sheet 1" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 5") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 5");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
        }

    if(s.getName() == "Your-Sheet 1" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 6") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 6");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }

    if(s.getName() == "Your-Sheet 1" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 8") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 8");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }

    if(s.getName() == "Your-Sheet 1" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 2") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 2");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }


//---------------Your-Sheet 2 - Moving select Row from "Your-Sheet 2" to desired Sheet--------------  

    if(s.getName() == "Your-Sheet 2" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 7") {
        var row = r.getRow(); 
        var numColumns = s.getLastColumn(); 
        var targetSheet = ss.getSheetByName("Your-Sheet 7");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
        s.getRange(row, 1, 1, numColumns).moveTo(target); 
        s.deleteRow(row); 
    }

    if(s.getName() == "Your-Sheet 2" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 3") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 3");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }

    if(s.getName() == "Your-Sheet 2" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 4") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 4");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }

    if(s.getName() == "Your-Sheet 2" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 5") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 5");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
        }

    if(s.getName() == "Your-Sheet 2" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 6") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 6");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }

    if(s.getName() == "Your-Sheet 2" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 8") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 8");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }
    if(s.getName() == "Your-Sheet 2" && r.getColumn() == 15 && r.getValue() == "Your-Sheet 1") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Your-Sheet 1");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }

And i have to do this for every Sheet!

//---------------Your-Sheet 3 - Moving select Row from "Your-Sheet 3" to desired Sheet--------------  

//---------------Your-Sheet 4 - Moving select Row from "Your-Sheet 4" to desired Sheet--------------   

//---------------Your-Sheet 5 - Moving select Row from "Your-Sheet 5" to desired Sheet

//---------------Your-Sheet 6 - Moving select Row from "Your-Sheet 6" to desired Sheet--------------  

//---------------Your-Sheet 7 - Moving select Row from "Your-Sheet 7" to desired Sheet--------------  

//---------------Your-Sheet 8 - Moving select Row from "Your-Sheet 8" to desired Sheet--------------  

}

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Во-первых, это должно быть разбито на два вопроса.

Для отметок времени вам не нужно запускать код на каждом отдельном листе - он будет работать для всей книги. Кроме того, вы передаете объект event в onEdit, но фактически не используете его. Первый бит состоит в том, чтобы получить активную ячейку из объекта события вместо использования набора if операторов.

Обновление информации при редактировании

// To access the user email string, you have to use an installable trigger through the GUI.
function onUpdate(e) {
  var sheet = e.source.getActiveSheet(); // Get the edited sheet and cells
  var row = e.range.getRow();
  var col = e.range.getColumn();

  // If it was column H edited...
  if(col == 8) {

    // Set the editor's email and a timestamp
    sheet.getRange(row, col).offset(0, 1, 1, 2).setValues([ [e.user.getEmail().toString(), new Date] ]);
  }
}
0 голосов
/ 05 сентября 2018

Для первого, если вы хотите проверить все листы, вы можете просто пропустить внешний
if( s.getName() == "Your-Sheet #" )

Для второго попробуйте это:

if(r.getColumn() == 15) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName(r.getValue());
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
}

Я проверил это на листе, который вы связали, и это сработало для меня.

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