我希望使用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]);
});
我期望电子表格中所有已命名范围的列表,无论是否已定义。
答案 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");
}