google apps script - Can I move a row that is updated from another sheet? -


i have 2 different sheets, first data stored , changes. on updating first sheet moves second sheet. trying figure out if after update, can move row second sheet tab in second sheet based off of data in column q or col 17. here have, not seem moving anything. possible?

function onupdate() {    var sheetnametowatch = "raw data";   var columnnumbertowatch = 17; // column = 1, b = 2, etc.   var valuetowatch = ["full", "partial", "process", "conditional", "fail", "exemption"];   var sheetnametomovetherowto = (valuetowatch + " certification");;    var ss = spreadsheetapp.getactivespreadsheet();   var sheet = spreadsheetapp.getactivesheet();   var range = sheet.getactivecell();    if (sheet.getname() == sheetnametowatch && range.getcolumn() == columnnumbertowatch && range.getvalue() == valuetowatch) {     var targetsheet = ss.getsheetbyname(sheetnametomovetherowto);     var targetrange = targetsheet.getrange(targetsheet.getlastrow() + 1, 1);     sheet.getrange(range.getrow(), 1, 1, sheet.getlastcolumn()).moveto(targetrange);     sheet.deleterow(range.getrow());   } } 

thanks.

ok, i've updated current script:

function onupdate() {   var sourcesheet = "raw data";   var columnnumbertowatch = 17; // column = 1, b = 2, etc.   var valuetowatch = ["full", "partial", "process", "conditional", "fail", "exemption"];   var sheetnametomovetherowto = (valuetowatch + " certification");    var ss = spreadsheetapp.getactivespreadsheet();   var sheet = spreadsheetapp.getactivesheet();   var range = sheet.getactivecell();    if (sheet.getname() === sourcesheet && range.getcolumn() === columnnumbertowatch && checkmatch(range.getvalue(), valuetowatch) === true) {     var targetsheet = ss.getsheetbyname(sheetnametomovetherowto);     var targetrange = targetsheet.getrange(targetsheet.getlastrow() + 1, 1);     sheet.getrange(range.getrow(), 1, 1, sheet.getlastcolumn()).moveto(targetrange);     sheet.deleterow(range.getrow());       } }  function checkmatch(value, array) {   (i in array) {     if (value === array[i]) {       return(true);     }   } } 

alright,

i tried specify little more it:

function onedit() {   var sourcesheet = "raw data";   var columnnumbertowatch = 17; // column = 1, b = 2, etc.   var valuetowatch = ["full", "partial", "process", "conditional", "fail", "exemption"];   var sheetnametomovetherowto = (valuetowatch + " certification");    var ss = spreadsheetapp.getactivespreadsheet();   var sheet = spreadsheetapp.getactivesheet();   var range = sheet.getactivecell();   var cert = range.getvalue();    if (valuetowatch.indexof(cert) === sourcesheet && range.getcolumn() === columnnumbertowatch && checkmatch(range.getvalue(), valuetowatch) === true) {     var sheetnametomovetherowto = (cert + " certification");     var targetsheet = ss.getsheetbyname(sheetnametomovetherowto);     var targetrange = targetsheet.getrange(targetsheet.getlastrow() + 1, 1);     sheet.getrange(range.getrow(), 1, 1, sheet.getlastcolumn()).moveto(targetrange);     sheet.deleterow(range.getrow());       } }  function checkmatch(value, array) {   (i in array) {     if (value === array[i]) {       return(true);     }   } } 

by defining cert , trying define more array valuetowatch.

you need change if statement. should "===" instead of "==". here explanation behind this.

here final script can use

function onedit(e) {   var sourcesheet = "raw data";   var columnnumbertowatch = 17; // column = 1, b = 2, etc.   var valuetowatch = ["full", "partial", "process", "conditional", "fail", "exemption"];   var ss = spreadsheetapp.getactivespreadsheet();   var range = e.range;   var activesheet = range.getsheet();   var activesheetname = activesheet.getname();   var row = range.getrow();   var value = ss.getsheetbyname(sourcesheet).getrange(row, columnnumbertowatch).getvalue();    if (activesheetname === sourcesheet && valuetowatch.indexof(value) >=0) {     var targetsheet = ss.getsheetbyname(value + " certification");     var targetrange = targetsheet.getrange(targetsheet.getlastrow() + 1, 1);     activesheet.getrange(row, 1, 1, activesheet.getlastcolumn()).moveto(targetrange);     activesheet.deleterow(row);       } } 

update cannot make script run on second spreadsheet without manually editing cell. once row gets pushed first spreadsheet in 2 second, not trigger onedit function in second spreadsheet. set allocate row correct sheet first spreadsheet this

 //this part of script on first spreadsheet     if (valuetowatch.indexof(value) >=0) {         var targetsheetname = value + " certification";       } else {         var targetsheetname = "raw data";       }         var targetsheet = spreadsheetapp.openbyid("1bjlkwxuwm6ue4shz2pbhh3f1e-8gktvv0870yetopko").getsheetbyname(targetsheetname);         var targetrange = targetsheet.getrange(targetsheet.getlastrow() + 1, 1,1,activesheet.getlastcolumn());         targetrange.setvalues(activesheet.getrange(row, 1, 1, activesheet.getlastcolumn()).getvalues());         activesheet.deleterow(row);      } 

Comments

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -