【问题标题】:How can I find the lowest number in a range, and increase that number by 1 in google sheets?如何找到一个范围内的最小数字,并在谷歌表格中将该数字增加 1?
【发布时间】:2020-08-28 20:18:39
【问题描述】:

首先,我没有编程背景,但我一直致力于在 Google 表格中为龙与地下城 5e 创建一个主动跟踪器。

我想做的是有一个宏为我做这件事:当我激活它时,它将搜索范围(在这种情况下为 C 列),找到具有最低数值的单元格,然后将 1 添加到它。

任何帮助将不胜感激!

【问题讨论】:

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


    【解决方案1】:

    解释:

    这个任务可以分解成两个不同的子任务:

    1. 您需要与电子表格文件交互以获取C 列 的值。以下代码从 Sheet1 获取列 C 的值,从第二行开始直到最后一行的内容:

      const ss = SpreadsheetApp.getActive();
      const sh = ss.getSheetByName('Sheet1');
      const cVals = sh.getRange('C2:C'+sh.getLastRow()).getValues().flat(1);
      

    cValsSheet1 中所有 C 值的列表。为了找到具有最小值的条目,您可以利用 reduce() 方法:

    const indexMin = cVals.reduce((min_i, x, i, ar) => x < ar[min_i] ? i : min_i, 0);
    

    这给出了indexMin 中具有最低值的元素的位置,从0 开始。但是,cVals 有一个从 C2 开始的 C 值列表。这就是为什么我们添加 2 以便在工作表中 C 列具有最低值的工作表中找到 row number,然后我们将 1 添加到旧值:

    sh.getRange(indexMin+2,3).setValue(sh.getRange(indexMin+2,3).getValue()+1)
    
    1. 最后,您希望能够从电子表格文件中执行此功能。为了实现这一点,您可以使用以下代码创建一个自定义菜单(宏):

      function onOpen() {
         SpreadsheetApp.getUi()
         .createMenu('Macros')
         .addItem('Add one to C minimum', 'plusOne')
         .addToUi();
      }
      

    完整解决方案:

      function onOpen() {
        SpreadsheetApp.getUi()
        .createMenu('Macros')
        .addItem('Add one to C minimum', 'plusOne')
        .addToUi();
      }
    
      function plusOne() {
      
        const ss = SpreadsheetApp.getActive();
        const sh = ss.getSheetByName('Sheet1');
        const last_row = sh.getLastRow();
        const num_rows = sh.getRange('C:C').getValues().filter(String).length;
        const num_blank = last_row-num_rows;
          
        const cVals = sh.getRange('C2:C'+last_row).getValues().flat(1);
        const indexMin = cVals.reduce((min_i, x, i, ar) => x < ar[min_i] ? i : min_i, 0);
     sh.getRange(indexMin+2+num_blank,3).setValue(sh.getRange(indexMin+2+num_blank,3).getValue()+1)
    }
    

    结果/说明:

    1. 点击工具 => 脚本编辑器
    2. 将完整代码复制/粘贴到空脚本中。
    3. 刷新电子表格,将创建一个新的宏作为边栏。
    4. 然后就可以点击执行任务了。


    假设:

    1. C 列有一个标题。
    2. 工作表的名称是 Sheet1。您可以通过代码进行调整。
    3. 如果有两个最小值(最小值出现两次),那么它只会将属于上排的单元格加 1。

    参考资料:

    Google Apps 脚本:

    JavaScript 库:

    【讨论】:

    • 这很好,但是有没有办法让它只添加到已经有数字的单元格中?我遇到的问题是它只是将 1 添加到我要更改的列表下方的空单元格中。
    • @AndrewPingry 请查看我更新的解决方案。现在如果数据之间有空白单元格,它仍然可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多