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
Post a Comment