[英]Script for Google Sheets to Move Row to New Sheet
我要设置的购物时间表存在一些问题。 当某些数据输入到“ J”列中时,我希望将整行移动到相应的新标签页。 我为我创建的样本表添加了一个可编辑的链接,该链接还有助于说明我要执行的操作。
如果可能的话,将背景也更改为样本表上的颜色也是有帮助的。
谢谢!
可编辑的链接: https : //docs.google.com/spreadsheets/d/1D0iptPchrrLuq75ysvXwisBa_Xr0fuNabAdTb3sm-yA/edit? usp =sharing
这是一个粗略的代码,可以工作,但是,如果将值更改为与之相同的值(因此,如果值已完成,然后将其编辑为20),它将删除该行。 修复起来很容易,但是我现在没有时间:)
编辑:刚刚记得要注意,它将使用最后一行,因此,为了将内容移回约会,您应该将图例移到工作表的顶部:)否则,您应该完全摆脱移回约会的位置。 您还可以尝试使用变量的处理方式,我只是不喜欢再次获取工作表,因此我将其中的许多函数发送给move函数。
function onEdit(e) {
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); //get active spreadsheet
var srcSheet = spreadSheet.getActiveSheet(); //get active sheet
var editCol = e.range.getColumn(); //check the edited column
if (editCol!==10) {return} //if the edited column is not J then we don't need to do anything else
var srcLastCol = srcSheet.getLastColumn(); //check how large is our data range
var srcRow = srcSheet.getRange(e.range.getRow(), 1, 1, srcLastCol); //get the source row range
var srcVals = srcRow.getValues(); //get the values from the source fow
var destSheet, destRow, destRange; //destination variables
Logger.log(e.value)
if (e.value>=1 && e.value<=14) { //for 1-14 we use we assign 1 sheet, the same function for everything
moveRow('In Shop', srcRow, srcVals, srcLastCol, spreadSheet);
}
else { //for everything else we use a switch
switch(e.value) {
case '15':
moveRow('Arrive / In Lot', srcRow, srcVals, srcLastCol, spreadSheet);
break;
case '17':
moveRow('Waiting on Parts, Truck, Etc.', srcRow, srcVals, srcLastCol, spreadSheet);
break;
case '20':
moveRow('Completed', srcRow, srcVals, srcLastCol, spreadSheet);
break;
default :
moveRow('Appointments', srcRow, srcVals, srcLastCol, spreadSheet);
}
}
}
function moveRow(destName, srcRow, srcVals, srcLastCol, spreadSheet) {
var destRow
var destSheet = spreadSheet.getSheetByName(destName)
destRow = destSheet.getLastRow() + 1;
destSheet.getRange(destRow, 1, 1, srcLastCol).setValues(srcVals)
srcRow.clear()
}
EDIT2回答评论
function moveRow(destName, srcRow, srcVals, srcLastCol) {
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet()
var destRow
var destSheet = spreadSheet.getSheetByName(destName)
destRow = destSheet.getLastRow() + 1;
destSheet.getRange(destRow, 1, 1, srcLastCol).setValues(srcVals)
srcRow.clear()
}
但是,对于任何运行时间较长的较大脚本来说,这都是不好的做法。 然后,您将浪费时间每次访问SpreadsheetApp。
至于颜色,这是对moveRow()的相当简单的调整:
function moveRow(destName, srcRow, srcVals, srcLastCol, spreadSheet) {
var destRow
var destSheet = spreadSheet.getSheetByName(destName);
destRow = destSheet.getLastRow() + 1;
var destRange = destSheet.getRange(destRow, 1, 1, srcLastCol);
destRange.setValues(srcVals);
destRange.setBackground(destSheet.getTabColor())
srcRow.clear()
}
至于排序,这是您需要安装destSheet = spreadSheet.getSheetByName(destName);
在调用moveRow()之前。 因此,让我们假设您在if
或if
本身之前的某个位置检索了destSheet。 该示例将按升序对A列进行排序(因此将1调整为所需值,假设您想要J,那么它将为10)。
if (e.value>=1 && e.value<=14) {
moveRow('In Shop', srcRow, srcVals, srcLastCol, spreadSheet);
destSheet.sort(1)acceding order
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.