我收到的错误:
异常:参数(字符串、数字(与 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);
}
});
}