是的,所以我的Google Sheet程序不起作用,尽管它确实起作用了。你看,我的程序是用一个自定义函数创建一个自定义菜单,然后当我点击它时,它就会激活这个函数。我可以让我的自定义菜单和自定义函数都工作,但过了一段时间,它就启动了,说它不工作了。具体来说,我得到了
异常:无法从此上下文调用SpreadsheetApp.getUi((
对于createEmptyMenu
和
类型错误:无法读取未定义的属性"getRange";
对于settingA
。当我创建一个新项目并复制和粘贴我的作品时,项目和程序运行得很好。那么,为什么我的程序在一段时间后突然不起作用呢?如果有帮助的话,我还有一个onEdit
触发器。
function createEmptyMenu() {
var menu = SpreadsheetApp.getUi().createMenu("⚙️ Admin Settings");
menu.addItem("Seperate Rows", "settingA");
menu.addToUi();
}
function settingA() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssLength = ss.getSheets().length;
for (j = 2; j <= ssLength; j++) {
var sheet = ss.getSheets()[j];
var num = sheet.getRange("A1:A").getNumRows();
.........
我会这样做:
function settingA() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.getSheets().forEach((sh,i)=>{
let num = getColumnHeight(1,sh,ss);
})
}
function getColumnHeight(col, sh, ss) {
var ss = ss || SpreadsheetApp.getActive();
var sh = sh || ss.getActiveSheet();
var col = col || sh.getActiveCell().getColumn();
const rcA = sh.getRange(1, col, sh.getLastRow(), 1).getValues().flat().reverse()
let s = 0;
for (let i = 0; i < rcA.length; i++) {
if (rcA[i].toString().length == 0) {
s++;
} else {
break;
}
}
return rcA.length - s;
}
像getRange('A1:A'(这样的范围倾向于在lastRow和maxRows 之间返回null