Google sheets Google Sheets脚本忽略或包含特定的工作表
我得到这个错误:TypeError:无法调用null的方法“getName”。我使用脚本将活动工作表的公式替换为单元格值。但是,我不想意外地在几个工作表上运行此操作,因此我希望能够排除或仅包括特定的工作表。我一直在关注另一篇文章,并提出了这一点,现在我有一个错误:Google sheets Google Sheets脚本忽略或包含特定的工作表,google-sheets,Google Sheets,我得到这个错误:TypeError:无法调用null的方法“getName”。我使用脚本将活动工作表的公式替换为单元格值。但是,我不想意外地在几个工作表上运行此操作,因此我希望能够排除或仅包括特定的工作表。我一直在关注另一篇文章,并提出了这一点,现在我有一个错误: function freezeValues() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheets = ss.getSheets(); //loop t
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
}
}
}
函数冻结值(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheets=ss.getSheets();
//循环浏览所有工作表并获取名称,查看它是否包含特定的字符串
对于(i=0;i
更新:
试一试:
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
}
}
}
函数冻结值(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheets=ss.getSheets();
//循环浏览所有工作表并获取名称,查看它是否包含特定的字符串
对于(i=0;i-1){
//获取活动图纸并用值替换范围
//var sheetActive=ss.getActiveSheet();
var范围=sheets.getRange(“A1:Z50”);
copyTo(范围,{contentsOnly:true});
}否则{
继续;
//跳过所有不符合条件的
}
}
}
但现在它什么也做不了。使用.include时出错,因此我转到.indexOf()>-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});
}
}
清除了错误,但是我得到了另一个错误,“TypeError:找不到对象Sheetname中的函数includes”。通过谷歌搜索,我发现已建议将includes替换为indexOf()>-1,并将名称转换为字符串。所以我试过了,它似乎允许冻结所有的工作表,并且不会停止不包含该字符串的工作表…我使用getActiveSheet,所以它只冻结我在UI上拉出来的工作表。我不认为我在其他任何地方需要ActiveSheet,只需要ActiveSpreadsheet,它是整个文档,而不是单个选项卡,对吗?是的。如果(sheetActive.getIndex()>4)或任何要忽略的范围,它看起来像
。这将替换sheets数组或name变量,并替换if行。