【问题标题】:loop through a script when a sheet name begins with X google apps script当工作表名称以 X google apps script 开头时循环遍历脚本
【发布时间】:2021-10-11 16:04:51
【问题描述】:

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

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

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

我在谷歌应用程序脚本中创建了一个代码,但问题是由于某种原因我的代码似乎不起作用......

这是我的代码:

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

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

非常感谢

【问题讨论】:

  • 您的问题是该功能不起作用还是创建新工作表时未自动执行?当你手动执行它时它是否有效?
  • 问题出在功能上,不起作用。当我在编辑器中运行它时,我会得到工作表和工作表名称。但从那里开始,它不会做任何其他事情。 @DmitryKostyuk
  • 好的,我刚刚发布了我的答案,你可以直接去第二点,它会工作:)

标签: google-apps-script google-sheets spreadsheet


【解决方案1】:

我让你的功能工作了 :)

有两点需要注意。

设置触发器

我不知道你是否已经这样做了以及触发器是否正常工作,但你需要一个像这样的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
}

这可确保您不会无用地运行该函数,而是仅在创建新工作表时运行。

您的if 声明错误

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

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

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

【讨论】:

  • 这很完美!我曾考虑为此创建一个定时触发器,但是,您的触发器要好得多!并且使用 changeType 这将防止它不必要地执行。太棒了!哦,天哪,我曾想过-1,但我的脑海中并不清楚。她的反应很棒。我已经非常清楚地学到了新东西。我非常感谢你非常明确和解释性的回答,以及你的时间。非常感谢@DmitryKostyuk
猜你喜欢
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多