将 IF 语句嵌套在循环引发错误中



我收到的错误:

异常:参数(字符串、数字(与 SpreadsheetApp.Spreadsheet.getRange 的方法签名不匹配。

function onOpen() {
var ui = SpreadsheetApp.getUi();
var VALUE = "Hide";
var COLUMN_NUMBER = 11;
ui.createMenu('Hidden Rows')
.addItem('Hide Rows w/Status = Hidden', 'menuItem1')
.addSeparator()
.addItem('Unhide Rows w/Status = Hidden', 'menuItem2')
.addToUi();
}
function menuItem1() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var cell = ss.getActiveCell()
var cellValue = cell.getValue();
for (r=1; r<lastRow; r++)  {
ss.getRange(r,11);
if(cellValue == VALUE){
activeSheet.hideRow(cell);
};
}
}
function menuItem2() {
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.alert('Second menu item!');
}

试试这个:

var VALUE = "Hide";//global
function menuItem1() {
var ss = SpreadsheetApp.getActive();
var activeSheet = ss.getActiveSheet();
var cell = ss.getActiveCell()
var cellValue = cell.getValue();
for (let r=1;r<lastRow;r++)  {
if(cellValue==VALUE){
activeSheet.hideRow(cell.getRow());//this hides the row of the activeCell() not the row of the iteration index
}
}
}

这两个值在脚本中不是全局范围:

var VALUE = "Hide";
var COLUMN_NUMBER = 11;

它们不能从函数范围提升到全局。

有趣的是,导致错误的那条线什么也没做。

ss.getRange(r,11);

您可能将 r 定义为某个字符串,所以我声明 r 在循环中具有部分范围。 您可能应该查看 const,var 并让 JavaScript 参考。

从你的剧本中我不清楚你的想法是什么,但也许就是这样。

function runOne() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getActiveSheet();
const rg=sh.getDataRange();
const vs=rg.getValues();
const cell=ss.getActiveCell()
const cellValue=cell.getValue();
vs.forEach(function(r,i){
if(cellValue==r[10]){
sh.hideRows(i+1);
}
});
}

最新更新