我收到此错误:TypeError:无法调用方法" getName"为null。我使用脚本用单元格值替换活动工作表的公式。但是,我不想在几张纸上意外地运行它,所以我希望能够排除或仅包含特定的纸张。我一直在关注另一篇文章并想出了这个,现在我有了错误:
function freezeValues() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
//loop through all sheets and get name to see if it includes specific string
for (i = 0; i < sheets.length; i++) {
var sheet = ss.getSheetByName(sheets[i]);
var name = sheet.getName();
if (name.includes("String_00")) {
//get active sheet and replace range with values
var sheetActive = ss.getActiveSheet();
var range = sheetActive.getRange("A1:Z50");
range.copyTo(range, {contentsOnly: true});
} else {
continue;
//skip over all those that don't meet the condition
}
}
}
更新:
试试这个:
function freezeValues() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
//loop through all sheets and get name to see if it includes specific string
for (i = 0; i < sheets.length; i++) {
//var sheet = ss.getSheetByName(sheets[i]);
var name = sheets[i].getName().toString();
if (name.indexOf("String_00") > -1) {
//get active sheet and replace range with values
//var sheetActive = ss.getActiveSheet();
var range = sheets.getRange("A1:Z50");
range.copyTo(range, {contentsOnly: true});
} else {
continue;
//skip over all those that don't meet the condition
}
}
}
但现在它没有做任何事情。使用.include给了我一个错误,所以我转移到.indexOf()&gt; -1。无论名称如何,都不会按预期冻结任何工作表的数据。
答案 0 :(得分:1)
我想出了两个解决方案,从绘图板开始。一个人创建一个数组,一种黑名单,然后如果工作表名称包含黑名单中的任何项目,则它返回并且不执行替换。第二种解决方案在工作表名称中搜索模式,然后继续进行替换。两者都完成了我想要做的事情。我认为我发现的代码有点儿麻烦,而且我正在做的事情有点复杂。我不需要遍历所有工作表名称,只需根据给定变量检查工作表名称。无论如何,他们在这里:
这个创建不编辑的页面的数组黑名单:
function freezeValues() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ['Sheet1', 'Sheet2', 'Sheet3', 'Sheet4'];
var sheetActive = ss.getActiveSheet();
if (sheets.indexOf(sheetActive.getName()) > -1) return;
var range = sheetActive.getRange("A1:Z50");
range.copyTo(range, {contentsOnly: true});
}
此选项仅在继续替换之前搜索工作表名称中的特定文本。
function freezeValues() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetActive = ss.getActiveSheet();
var name = sheetActive.getName()
if (name.indexOf("String_00") > -1) {
var range = sheetActive.getRange("A1:Z50");
range.copyTo(range, {contentsOnly: true});
}
}
我确定有一种方法可以使用工作表索引值,所以如果你想跳过前4页,你也可以这样做,所以它根本不会调用名字。
更新
function freezeValues2() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetActive = ss.getActiveSheet();
if (sheetActive.getIndex() > 4) {
var range = sheetActive.getRange("A1:Z50");
range.copyTo(range, {contentsOnly: true});
}
}