如果我必须做一件事两次,我通常会试着找到一种自动化或简化它的方法。为什么?因为如果我每天花5分钟来排序或将行从一个电子表格移到另一个电子表格,那么一年总共要花30个小时。如果你有一些不同的电子表格,你想要保持有条理,想想每年30个小时会增加多快。
如何添加一个自定义脚本谷歌表
在顶部导航中,选择工具>脚本编辑器若要打开脚本编辑器窗口,请单击文件>新>脚本文件命令,打开新的脚本文件。
⚠️警告:如果你直接从这篇文章中复制和粘贴公式-确保你仔细检查引号和双引号的格式-从网页复制可能会改变格式并导致脚本中断。在脚本编辑器中,您可能需要替换引号和双引号。⚠️
自动排序的日期或优先级
我在我的待办事项列表、客户状态表和审查表中使用这个脚本,以自动按优先级或到期日期组织行,确保最具时间敏感性的项目位于表的顶部。
这个函数自动对给定的范围进行排序A2: H30在工作表名称中审核跟踪通过列5(这一栏是我记录预产期的地方)。
函数myFunction(事件){
var sheet = SpreadsheetApp.getActiveSheet();
if (sheet.getName() == '审核跟踪”){
var editedCell = sheet.getActiveCell();
var columnToSortBy =5;
var tableRange = "A2: H30”;//排序
//列A = 1,列B = 2,等等…
if(editedCell.getColumn() == columnToSortBy){
var range = sheet.getRange(表范围);
的范围内。sort({column: columnToSortBy,升序:true});
}
}
}
完成后将行移动到单独的选项卡
这是一个脚本,我用于客户状态表或审查表自动移动一行从一个正在进行的表完整的表格.
该函数监视列7在表格中审核跟踪对于值完整的然后将行移动到工作表上完成评审当该值出现时。
函数myFunction() {
//在列中输入魔术值时,将一行从工作表移动到另一行
//调整以下变量以适应您的需要
//见https://productforums.google.com/d/topic/docs/ehoCZjFPBao/discussion
var sheetNameToWatch = "审核跟踪”;
var columnNumberToWatch =7;
//列A = 1,列B = 2,等等…
var valueToWatch = "完整的”;
var sheetNameToMoveTheRowTo = "完成评审”;
var ss = spreadsheetapp . getactivesspreadsheet ();
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 ());
}
}
自动更新新行电子邮件
这是我用于回顾的脚本。每当团队成员向我的评审跟踪电子表格中添加新行并将其标记为准备复习,一封电子邮件会自动发送到我的收件箱,其中包括:名称,客户名称,正在审查的项目,正在审查的项目的链接,截止日期,笔记和状态。
这个函数监视值的状态准备复习.当找到该值时,它会添加该值发送对列8并发送带有指定行信息的电子邮件(在为信息消息设置HTML模板部分)。如果发送值已经在列中8,函数将跳转到下一行特征这两个准备复习还有一个空白列8.
函数sendEmail() {
/ /设置功能
var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
if (ActiveSheet.getName() == '审核跟踪”){
var StartRow =2;
var RowRange = ActiveSheet.getLastRow() - StartRow + 1;
var WholeRange = ActiveSheet.getRange(StartRow 1 RowRange 7);
var AllValues = WholeRange.getValues();
Var信息= "";
/ /遍历循环
for (i in AllValues) {
//设置当前行
var CurrentRow = AllValues[i];
如果(CurrentRow [6== "准备接受审查&& CurrentRow[7= "发送”){
//定义列检查是否发送
//列A = 1,列B = 2,等等…
//var EmailSent = CurrentRow[8];
//如果行已经发送,则继续下一次迭代
//if (EmailSent == "发送”){
/ /继续;}
//设置信息的HTML模板
消息+ =
“< p > < b >名称:" + CurrentRow[0] + "" +
“< p > < b >客户:" + CurrentRow[1] + "" +
“< p > < b >检讨项目:" + CurrentRow[2] + "" +
“< p > < b >链接到项目:" + CurrentRow[3] + "" +
“< p > < b >审核截止日期:" + CurrentRow[4] + "" +
“< p > < b >注:" + CurrentRow[5] + "" +
“< p > < b >状态:" + CurrentRow[6] + "" + "
";
//设置要查看的行
var setRow = parseInt(i) + StartRow;
//将row标记为"发送"
//列A = 1,列B = 2,等等…
ActiveSheet。getRange (setRow 8) .setValue(“发送”);
}//如果检查就绪
}//循环结束
//定义发送邮件的对象
var SendTo = "example.com”;
//设置主题行
var Subject = "新的交付物”;
如果message不为空,则发送实际的电子邮件
If (message) {
MailApp.sendEmail ({
: SendTo,
主题:主题,
htmlBody:消息,
});
} / /如果消息
}//if sheetName检查
} / /函数结束
使用多个脚本
如果您正在运行多个脚本,则需要进行调整,使它们都具有惟一的名称。在下面的例子中,函数onEdit调用每个有标题的函数myFunction1而且myFunction2.如果有多个同名函数,谷歌将只运行最后一个函数,除非进行区分。
下面是组合的示例的物品而且完成后搬家将上述函数放入单个脚本中。
函数onEdit(事件){
myFunction1(事件);
myFunction2 ();
}
函数myFunction1(事件){
var sheet = SpreadsheetApp.getActiveSheet();
if (sheet.getName() == 'Review Tracker') {
var editedCell = sheet.getActiveCell();
var columnToSortBy = 5;
var tableRange = "A2:H30";//排序
//列A = 1,列B = 2,等等…
if(editedCell.getColumn() == columnToSortBy){
var range = sheet.getRange(表范围);
的范围内。sort({column: columnToSortBy,升序:true});
}
}
}
函数myFunction2() {
//在列中输入魔术值时,将一行从工作表移动到另一行
//调整以下变量以适应您的需要
//见https://productforums.google.com/d/topic/docs/ehoCZjFPBao/discussion
var sheetNameToWatch =“审查跟踪器”;
var columnNumberToWatch = 7;
//列A = 1,列B = 2,等等…
var valueToWatch = "完成";
var sheetNameToMoveTheRowTo = "已完成的评审";
var ss = spreadsheetapp . getactivesspreadsheet ();
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 ());
}
}
添加项目触发器
为了运行脚本,您需要添加一个触发器。触发器允许你的脚本在某些事件上执行,比如打开电子表格,编辑电子表格等。
要添加项目触发器,请单击触发(时钟)图标要打开项目触发器弹出框。从这里,您可以添加一个新的触发器,并选择应该运行哪个函数以及应该触发该函数执行的事件。