当 sheet 名称以 X google apps 脚本开头时循环执行脚本

loop through a script when a sheet name begins with X google apps script

通常,当您在 google 个工作表文档中创建一个或多个工作表时,这些默认称为“Sheet 1”、“Sheet 2”、“Sheet 3" ...

我正在尝试,当手动创建一个或多个新工作表时,脚本会自动激活并检测哪些工作表以名称“Sheet”开头。

在名称以“Sheet”开头的工作表上,脚本将应用样式。

我已经在 google 应用程序脚本中创建了一个代码,但问题是由于某些原因我的代码似乎无法工作...

这是我的代码:

function newSheet(){
  
  var libro = SpreadsheetApp.getActiveSpreadsheet();
  var numeroDeHojas = libro.getNumSheets();
 
  for (var i = 0; i < numeroDeHojas; i++) {

    var hojass = libro.getSheets()[i];
    var nombreHoja = hojass.getName();
    Logger.log(hojass);
    Logger.log(nombreHoja);

    if ( nombreHoja == nombreHoja.toString().indexOf('Hoja') ){
     
      hojass.setHiddenGridlines(true); // Ocultar las lineas de cuadricula
      hojass.setColumnWidth(1, 50);  //Modificar tamaño de columna A de las hojas a 50
      hojass.getRange(1, 1, hojass.getMaxRows(), hojass.getMaxColumns()).activate();  //Seleccionar toda las celdas de la hoja
      hojass.getActiveRangeList().setVerticalAlignment('middle').setFontFamily('Open Sans');  //Dar alineación vertical en el medio y fuente Open Sans
      hojass.getRange('A1').activate();   //Quitar la seleccion de todas las celdas de la hoja y activar solo la celda A1
    
    }
  }
}

有人会这么好心帮助我吗?非常感谢任何帮助。

非常感谢

我让你的功能正常工作:)

有两点需要注意。

设置触发器

我不知道你是否这样做了,触发器是否正常工作,但你需要一个像这样的 onChange 触发器(只需从 IDE 直接执行一次):

const setTrigger = () => {
  const sheet = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("newSheet")
    .forSpreadsheet(sheet)
    .onChange()
    .create();
}

您的 newSheet() 函数随后将接收一个事件作为其参数。出于性能原因,您可能希望像这样重构函数的开头:

function newSheet(e){ // e is the event passed by the trigger
  if(e.changeType !== "INSERT_GRID") return; // don't run if the function was triggered by something which is not a creation of a new sheet
  // rest of the code as is
}

这确保您不会无用地 运行 函数,但只有在创建新的 sheet 时才会如此。

你的if说法是错误的

这是测试 indexOf 返回值的正确方法:

if (-1 !== nombreHoja.indexOf('Hoja')) {
  // the actual code is fine
}

还可以对您的代码进行一些其他改进,但它确实按原样工作,所以您应该没问题;)