关于javascript:通过搜索/比较自动递增值并匹配Google表格脚本中的两列

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(值)