【问题标题】:Google Script - clear range except one certain cell value谷歌脚本 - 清除范围,除了一个特定的单元格值
【发布时间】:2023-03-24 17:41:01
【问题描述】:

我有一个简单的功能,用于清理一个谷歌表格中两个特定范围内的所有单元格的内容。

function clearRange() {
      var activeSheet = SpreadsheetApp.openById("idofmytable").getSheetByName("name");
      activeSheet.getRange('B9:H35').clearContent();
      activeSheet.getRange('K9:Q35').clearContent();
    }

我想更新函数并让脚本清除所有单元格,除非单元格的值为“10”。如果单元格的值为 10,则不应将其清除。

我该怎么做?

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:
    • 您要清除工作表中所有不属于10 值的单元格的内容。
    • 您希望使用 Google Apps 脚本实现此目的。

    如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

    在这个答案中,我使用了以下流程。

    1. 检索工作表数据范围内的所有值。
    2. 检索没有10 值的单元格范围作为a1Notation。
    3. 使用getRangeList清除内容。

    修改后的脚本:

    function clearRange() {
      var activeSheet = SpreadsheetApp.openById("idofmytable").getSheetByName("name");
    
      var columnToLetter = function(column) { // This is from https://stackoverflow.com/a/21231012/7108653
        var temp, letter = '';
        while (column > 0) {
          temp = (column - 1) % 26;
          letter = String.fromCharCode(temp + 65) + letter;
          column = (column - temp - 1) / 26;
        }
        return letter;
      };
    
      // Retrieve all values.
      var values = activeSheet.getDataRange().getValues();
    
      // Retrieve the cell range as a1Notation, when the cell value is not 10.
      var ranges = values.reduce(function(ar, row, i) {
        row.forEach(function(col, j) {if (col != 10) ar.push(columnToLetter(j + 1) + (i + 1))});
        return ar;
      }, []);
    
      // Clear the content of the retrieved ranges.
      activeSheet.getRangeList(ranges).clearContent();
    }
    

    参考资料:

    如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

    补充:

    • 您要清除“B9:H35 & K9:Q35”范围内的单元格中的内容,这些内容不是工作表中10 的值。

    示例脚本:

    function clearRange() {
      var activeSheet = SpreadsheetApp.openById("idofmytable").getSheetByName("name");
    
      var columnToLetter = function(column) { // This is from https://stackoverflow.com/a/21231012/7108653
        var temp, letter = '';
        while (column > 0) {
          temp = (column - 1) % 26;
          letter = String.fromCharCode(temp + 65) + letter;
          column = (column - temp - 1) / 26;
        }
        return letter;
      };
    
      // Retrieve values from B9:H35 and K9:Q35.
      var value1 = activeSheet.getRange('B9:H35').getValues();
      var value2 = activeSheet.getRange('K9:Q35').getValues();
    
      // Retrieve the cell range as a1Notation, when the cell value is not 10.
      var colOffset1 = 2;
      var colOffset2 = 11;
      var rowOffset = 9;
      var ranges1 = value1.reduce(function(ar, row, i) {
        row.forEach(function(col, j) {
        if (col != 10) ar.push(columnToLetter(j + colOffset1) + (i + rowOffset))});
        return ar;
      }, []);
      var ranges2 = value2.reduce(function(ar, row, i) {
        row.forEach(function(col, j) {
        if (col != 10) ar.push(columnToLetter(j + colOffset2) + (i + rowOffset))});
        return ar;
      }, []);
    
      // Clear the content of the retrieved ranges.
      activeSheet.getRangeList(ranges1).clearContent();
      activeSheet.getRangeList(ranges2).clearContent();
    }
    

    【讨论】:

    • 非常感谢,该脚本会删除除带有“10”的单元格之外的所有内容,但它适用于整个工作表,而不仅仅是 B9:H35 和 K9:Q35 范围
    • @nelidius 感谢您的回复。我带来的不便表示歉意。我更新了我的答案。你能确认一下吗?在更新的脚本中,“B9:H35 & K9:Q35”被选中,除10 之外的值被清除。如果我误解了您的问题并且这不是您想要的结果,我再次道歉。
    • @nelidius 欢迎。谢谢你让我知道。我很高兴你的问题得到了解决。如果您的问题已解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为您的问题和解决方案将对他们有用。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多