Google表格脚本忽略或包含特定表格

时间:2018-04-14 03:39:23

标签: google-sheets

我收到此错误: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。无论名称如何,都不会按预期冻结任何工作表的数据。

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});
  }
}