停止浪费时间并使用三个脚本自动化 Google Sheets
如果我必须做两次事情,我通常会尝试找到一种方法来自动化或简化它。 为什么? 因为如果我每天花 5 分钟对一个电子表格中的行进行排序或移动到另一个电子表格,那么一年就增加了 30 个小时。 如果您有几个不同的电子表格要保持井井有条,请想一想每年 30 小时的时间会增加多快。
如何将自定义脚本添加到 Google 表格
在顶部导航中,选择工具>脚本编辑器打开脚本编辑器窗口,然后单击文件>新建>脚本文件打开一个新的脚本文件。
️警告:如果您直接从这篇文章中**和粘贴公式——确保仔细检查引号和双引号的格式——从网页**可能会改变格式并导致脚本中断。 您可能需要在脚本编辑器中替换引号和双引号。️
按日期或优先级自动排序
我在我的待办事项列表、客户状态表和审查表中使用此脚本,以按优先级或截止日期自动组织行,确保对时间最敏感的项目位于工作表的顶部。
此函数按第5列(我保留截止日期的列)自动对工作表名称Review Tracker 中的给定范围A2:H30进行排序。
函数 myFunction(event){ var sheet = SpreadsheetApp.getActiveSheet(); if (sheet.getName() == ' Review Tracker ') { vareditedCell = sheet.getActiveCell(); var columnToSortBy = 5 ; var tableRange = “ A2:H30 “; // 排序什么 // 列 A = 1, B = 2, 等等... if(editedCell.getColumn() == columnToSortBy){ var range = sheet.getRange(tableRange); range.sort( { column : columnToSortBy, 升序: true } ); } } } |
完成后将行移动到单独的选项卡
这是我用于客户状态表或审查表的脚本,用于自动将一行从正在进行的表移动到已完成的表。
此函数监视工作表审阅***中的第7列的值Complete ,然后在该值出现时将该行移动到工作表已完成的审阅。
函数 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.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()); } } |
新行的自动电子邮件更新
这是我用于评论的脚本。 每当团队成员在我的审阅***电子表格中添加新行并将其标记为Ready to Review 时,都会自动向我的收件箱发送一封电子邮件,其中包括:姓名、客户名称、正在审阅的项目、正在审阅的项目的链接、截止日期、注释和状态。
此函数监视值Ready to Review的状态。 找到该值后,它会将发送到第8列的值相加,并发送一封带有指定行信息的电子邮件(在信息消息部分的设置 HTML 模板中找到)。 如果发送的值已经在第8列中,则该函数会跳到下一行,该行同时具有Ready to Review和一个空白列8 。
函数 sendEmail() { //设置函数 var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); if (ActiveSheet.getName() == ' Review Tracker ') { var StartRow = 2 ; var RowRange = ActiveSheet.getLastRow() – StartRow + 1; var WholeRange = ActiveSheet.getRange( StartRow,1,RowRange,7 ); var AllValues = WholeRange.getValues()「站群」; 无功消息=“”; //迭代循环 for (i in AllValues) { //设置当前行 var CurrentRow = AllValues[i]; if (CurrentRow[ 6 ] == “准备审核” && CurrentRow[ 7 ] != “已发送”) { //定义列来检查是否发送 // 列 A = 1, B = 2, 等等... //var EmailSent = CurrentRow[ 8 ]; //如果行已发送,则继续下一次迭代 //if (EmailSent == “ sent ”) { //继续;} //设置信息的HTML模板 留言 += “<p><b>名称: </b>” + CurrentRow[0] + “</p>” + “<p><b>客户端: </b>” + CurrentRow[1] + “</p>” + “<p><b>要审查的项目: </b>” + CurrentRow[2] + “</p>” + “<p><b>项目链接: </b>” + CurrentRow[3] + “</p>” + “<p><b>审查截止日期: </b>” + CurrentRow[4] + “</p>” + “<p><b>注释: </b>” + CurrentRow[5] + “</p>” + “<p><b>状态: </b>”+CurrentRow[6]+“</p>”+“</p><br><br>”; //设置要查看的行 var setRow = parseInt(i) + StartRow; //将行标记为“已发送” // 列 A = 1, B = 2, 等等... ActiveSheet.getRange(setRow, 8).setValue(“发送”); }//如果评论准备好了 }//for循环关闭 //定义向谁发送电子邮件 var SendTo = “ [email protected] ”; //设置主题行 var Subject =“要审查的新可交付成果”; //如果消息不为空,则发送实际的电子邮件 如果(消息){ MailApp.sendEmail({ 至:发送至, 主题:主题, htmlBody:消息, }); }//如果消息 }//if sheetName 审核 }//结束函数 |
使用多个脚本
如果您正在运行多个脚本,则需要进行调整,使它们都具有唯一的名称。 在我下面的示例中,函数onEdit调用每个函数,名为myFunction1和myFunction2 。 如果你有多个同名的函数,除非你区分,否则谷歌只会运行最后一个函数。
下面是将上述自动排序和完成后移动功能组合到单个脚本中的示例。
功能 onEdit(事件){ myFunction1(事件); myFunction2(); } 函数 myFunction1(event){ var sheet = SpreadsheetApp.getActiveSheet(); if (sheet.getName() == 'Review Tracker') { vareditedCell = sheet.getActiveCell(); var columnToSortBy = 5; var tableRange = “A2:H30”; // 排序什么 // 列 A = 1, B = 2, 等等... if(editedCell.getColumn() == columnToSortBy){ var range = sheet.getRange(tableRange); range.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.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()); } } |
添加项目触发器
为了让您的脚本运行,您需要添加一个触发器。 触发器允许您的脚本在某些事件上执行,例如打开电子表格、编辑电子表格等。
要添加项目触发器,请单击触发器(时钟)图标以打开项目触发器弹出窗口。 从这里您可以添加一个新触发器并选择应该运行哪个函数以及应该触发该函数执行的事件。
注册我们的时事通讯以获取更多此类帖子 - 直接发送到您的收件箱!
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。如若转载,请注明出处:http://www.botadmin.cn/sylc/9624.html