【问题标题】:Automatically increment value by search /compare and match two columns in Google Sheets Script通过搜索/比较自动增加值并匹配 Google 表格脚本中的两列
【发布时间】:2020-06-02 15:47:52
【问题描述】:

我目前必须手动输入 Sheet1 列 B,但我想在每次脚本运行时自动增加它。

我正在使用 Google 表格脚本。

这部分工作正常。

它是如何工作的: Sheet2 A列是从Sheet1 A列导入的下拉列表

如果 Sheet2 列 B 是今天的周年纪念日 Sheet 2 列 F 自动被“重置”

然后,工作脚本会删除工作表 2 中 F 为“重置”的行,并将每个新行添加到底部

目前正在使用这个脚本

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);
    }
  }
}

使用今天日期的工作位示例 - 2020 年 6 月 2 日

      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?

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    我相信你的目标如下。

    • 当脚本删除“Sheet2”中带有reset 的行时,您想增加“Sheet1”中名称相同的“B”列的值。
      • 在您的情况下,“Sheet2”的“A”列中包含相同的名称。
    • 您想通过修改问题中的脚本来实现这一点。

    对于这个,这个答案怎么样?

    修改点:

    • 在这种情况下,需要知道“Sheet1”的值并将它们与“Sheet2”的值进行比较。流程如下。
      1. 删除“Sheet2”中的行。
        • 此时,会创建一个包含已删除行信息的对象。
      2. 增加“Sheet1”中“B”列的值。
        • 使用对象更新“B”列的值,并将更新后的值放入工作表中。

    当以上几点反映到你的脚本中时,它变成如下。

    修改脚本:

    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”的工作表名称与您的实际情况不同,请修改。
    • 如果您的实际情况与问题中样本值的结构不同,则此修改后的脚本可能不起作用。所以请注意这一点。

    参考资料:

    【讨论】:

    • 在我提供的测试数据中效果很好,谢谢。你的答案是 100% 正确和可靠的。
    • @Snachypu 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多