如何创建所有命名范围的列表-空或已定义

时间:2019-07-30 21:12:11

标签: google-apps-script google-sheets

我希望使用Google App脚本返回所有命名范围,然后删除具有空值或#REF值的范围。

我尝试了许多端点来查询命名范围,但是这些响应仅返回定义的范围。

示例代码段:

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ranges = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges();
  var tmpArrays = [];

  ranges.forEach(function(range) {
    if(range.getRange() !== null) {
    tmpArrays.push(range.getName(), range.getRange());
    range.remove();
    }
  });

  tmpArrays.forEach(function(addRange) {
    ss.setNamedRange(addRange[0], addRange[1]);
  });

我期望电子表格中所有已命名范围的列表,无论是否已定义。

1 个答案:

答案 0 :(得分:0)

尝试一下:

这将找到并列出所有命名范围,它们的位置和值。至少它对我的命名范围是这样做的。

function findAllNamedRanges() {
  var ss=SpreadsheetApp.getActive();
  var nrA=ss.getNamedRanges();
  var html="<style>th,td{border:1px solid black;}</style>";
  for(var i=0;i<nrA.length;i++) {
    html+=Utilities.formatString('Name: %s Range: %s Sheet: %s <br />',nrA[i].getName(),nrA[i].getRange().getA1Notation(),nrA[i].getRange().getSheet().getName());
    var vA=nrA[i].getRange().getValues();
    var row=nrA[i].getRange().getRow();
    var col=nrA[i].getRange().getColumn();
    if(vA.length>1) {
      html+="<table><tr><th>Row</th><th>Col</th><th>Value</th></tr>";
      for(var j=0;j<vA.length;j++) {
        html+="<tr>";
        for(var k=0;k<vA[j].length;k++) {
          html+=Utilities.formatString('<td>%s</td><td>%s</td><td>%s</td>',row + j,col + k,vA[j][k]);
        }
        html+="</tr>"
      }
      html+='</table><br /><hr><br />';
    }      
    if(vA.length==1) {
      html+=Utilities.formatString('row: %s, col: %s value: %s <br /><hr>',row,col,vA[0][0]);
    }
    if(!vA) {
      html+="undefined <br /><hr>";
    }
  }
  Logger.log(html);
  var userInterface=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "Named Ranges");
}

此版本还会删除其任何单元格中带有“ #REF”的任何命名范围。

function findAllNamedRanges() {
  var ss=SpreadsheetApp.getActive();
  var nrA=ss.getNamedRanges();
  var html="<style>th,td{border:1px solid black;}</style>";
  for(var i=0;i<nrA.length;i++) {
    html+=Utilities.formatString('Name: %s Range: %s Sheet: %s <br />',nrA[i].getName(),nrA[i].getRange().getA1Notation(),nrA[i].getRange().getSheet().getName());
    var vA=nrA[i].getRange().getValues();
    var row=nrA[i].getRange().getRow();
    var col=nrA[i].getRange().getColumn();
    if(vA.length>1) {
      html+="<table><tr><th>Row</th><th>Col</th><th>Value</th><th>Value</th></tr>";
      for(var j=0;j<vA.length;j++) {
        html+="<tr>";
        for(var k=0;k<vA[j].length;k++) {

          html+=Utilities.formatString('<td>%s</td><td>%s</td><td>%s</td><td>%s</td>',row + j,col + k,vA[j][k],(vA[j][k]=="#REF")?"Removed":"OK");
          if(vA[j][k]=="#REF") {
            nrA[i].remove;
            continue;
          }
        }
        html+="</tr>"
      }
      html+='</table><br /><hr><br />';
    }      
    if(vA.length==1) {

      html+=Utilities.formatString('row: %s, col: %s value: %s Status: %s<br /><hr>',row,col,vA[0][0],(vA[0][0]=="#REF")?"Removed":"OK");
      if(vA[0][0]=="#REF") {
        nrA[i].remove();
        continue;
      }
    }
    if(!vA) {
      html+="undefined <br /><hr>";
    }
  }
  Logger.log(html);
  var userInterface=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "Named Ranges");
}