Automatically increment value by search /compare and match two columns in Google Sheets Script
我目前必须手动输入Sheet1的B列,但是我希望每次脚本运行时自动增加它。
我正在使用Google表格脚本。
这部分正在工作。
工作方式:
Sheet2列A是从Sheet1列A
导入的下拉列表
如果工作表2列B是今天的周年纪念日,则工作表2列F自动被设置为"重置"
然后,工作脚本删除工作表2中F为"重置"的行,并将每个行添加到底部。
当前正在使用此脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function writeupReset() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = ss.getSheetByName('Sheet2'); var r = s.getRange('C:C'); var v = r.getValues(); for(var i=v.length-1;i>=0;i--){ if(v[0,i]=='reset'){ s.insertRowsAfter(251,1); s.deleteRow(i+1); } } } |
使用今天日期的工作位示例-6/2/20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Sheet1 Sheet2 (before script) Sheet2 (after script) A B A B C A B C |---------------| |-------------------------| |-------------------------| 1 | name | resets | 1 | name | date | delet | 1 | name | date | delet | |---------------| |-------------------------| |-------------------------| 2 | bill | 1 | 2 | bill | 6/2/19 | reset | 2 | alex | 9/5/19 | | |---------------| |-------------------------| |-------------------------| 3 | mark | 5 | 3 | alex | 9/5/19 | | 3 | adam | 11/6/19 | | |---------------| |-------------------------| |-------------------------| 4 | holy | 2 | 4 | adam | 11/6/19 | | 4 | tony | 12/1/19 | | |---------------| |-------------------------| |-------------------------| 5 | tony | 0 | 5 | mark | 6/2/19 | reset | 5 | | | | |---------------| |-------------------------| |-------------------------| 6 | alex | 2 | 6 | tony | 12/1/19 | | 6 | | | | |---------------| |-------------------------| |-------------------------| 7 | june | 1 | 7 | | | | 7 | | | | |---------------| |-------------------------| |-------------------------| 8 | jack | 0 | to 252 rows (last two hidden) to 252 rows (last two hidden) |---------------| 9 | adam | 2 | |---------------| |
那么当脚本删除Sheet1中的"重置"行时,如何编辑脚本以自动增加Sheet1的B列?
我相信您的目标如下。
-
当脚本删除" Sheet2 "中具有
reset 的行时,您想增加" Sheet1 "中名称相同的" B "列的值。- 在您的情况下," Sheet2 "中的" A "列中包含相同的名称。
- 您想通过修改问题中的脚本来实现。
为此,答案如何?
修改要点:
- 在这种情况下,需要知道" Sheet1 "的值,并将它们与" Sheet2 "的值进行比较。流程如下。
-
删除" Sheet2 "中的行。
- 此时,将创建一个包含已删除行信息的对象。
-
增加" Sheet1 "中的" B "列的值。
- 使用对象更新列" B"的值,并将更新后的值放置到工作表中。
当以上几点反映到脚本中时,它如下所示。
修改后的脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | function writeupReset() { var ss = SpreadsheetApp.getActiveSpreadsheet(); // 1. Delete rows in Sheet2. var s = ss.getSheetByName('Sheet2'); var r = s.getRange('A1:C' + s.getLastRow()); // Modified var v = r.getValues(); var obj = {}; // Added for(var i=v.length-1;i>=0;i--){ if(v[i][2] == 'reset') { // Modified s.insertRowsAfter(251,1); s.deleteRow(i+1); var name = v[i][0] // Added obj[name] = obj[name] ? obj[name] + 1 : 1; // Added } } // I added below script. // 2. Increase values of the column"B" in Sheet1. var sheet = ss.getSheetByName("Sheet1"); var range = sheet.getRange("A2:B" + sheet.getLastRow()); var values = range.getValues().map(([a, b]) => ([obj[a] ? b += obj[a] : b])); range.offset(0, 1, values.length, 1).setValues(values); } |
笔记:
- 在此修改的脚本中,它假定" Sheet1 "中列" \\ A "的每个值都是所有值中的唯一值。从您的问题中,我可以这样理解。
- 如果" Sheet1 "和" Sheet2 "的工作表名称与您的实际情况不同,请对其进行修改。
- 如果您的实际情况与问题中样本值的结构不同,则此修改后的脚本可能不起作用。因此,请注意这一点。
参考:
- 地图()
- setValues(值)