根据单元格值将行移动到其他工作表

时间:2019-05-12 19:11:44

标签: javascript google-apps-script

我有一个工作表,其中有一些行要根据单元格值移到另一工作表。我尝试遵循本文的解决方案(请参阅下面的内容),但是在按照我想要的方式编辑脚本时遇到了麻烦。

我正在为活动办理登机手续。我希望能够更改F列中的值,并使用状态更改的时间填充G列,并将行数据迁移到“到达与会者”表。

我相信脚本已经做到了,但是必须手动运行它。在将A(事件)中的行数据迁移到B(与会者到达)之后,它也要删除行数据。

我的问题是有人可以帮助我进行设置,以使脚本连续运行(在编辑时),如果我错过了什么,还可以完成上述所有工作吗?

我认为脚本在运行时不会遵循下拉格式,因此我愿意手动输入内容。如果可以保持这种状态,那将很酷-使其更容易。

这是我正在测试的表。

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

这是我尝试遵循的解决方案。这一切都归功于Jason P和Ritz。

Google App Script - Google Spreadsheets Move Row based on cell value efficiently

谢谢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 个答案:

答案 0 :(得分:2)

尝试一下:

我想您已经知道您将需要一个可安装的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);
    }
  }
}