Google 随机应用程序脚本 - 异常:参数无效:名称 - 命名重命名工作表时

Google app script random - Exception: Argument non valide : name - while naming renaming sheets

您好,感谢您的帮助,

我正在编写一个小代码来将一些数据从一个 spreadsheet 复制到另一个指定的 spread。 要在新的传播sheet 中安排所有数据,我需要将其放在不同的 sheet 中,并带有引用名称。

当(通过复制)创建新的 sheet 并将重命名时,会发生错误。 这在大多数时候都运行良好,但并非总是如此,这当然是一个问题。 它告诉我错误是第 49 行 tss.getSheets()[i].setName(ref[i]);,它是:

Exception: Invalid argument : name

这很奇怪,因为所有 sheet 的名称几乎相同,例如 S36779 有效,但 S36780 无效。

看下面的代码(还没有完成,但是 sheet 重复的部分是)

function onOpen(e) {

  SpreadsheetApp.getUi()
      .createMenu('Fiche Produit')
      .addItem('Créer une fiche produit','creaficheproduit')
      .addSeparator()

      .addToUi();

}

function creaficheproduit() {

  var tss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = tss.getSheets();
  for (i = 0; i < sheets.length-1; i++) {
    tss.deleteSheet(sheets[i+1]);  
  } 
  var tsh = tss.getSheets()[0];

  var ui = SpreadsheetApp.getUi();  
  var prompt = ui.prompt('Indiquer le lien de la Fiche CS source', 'lien',ui.ButtonSet.OK_CANCEL) 
  var response = prompt.getResponseText();
  var button = prompt.getSelectedButton();

  if (button == ui.Button.OK) {

    var sss = SpreadsheetApp.openByUrl(response);
    var ssh = sss.getSheetByName('Fiche_eclate_CS');

    var lrow = getFirstEmptyRowByColumnArray (ssh,"D");
    var ref = ssh.getRange("D3:D"+lrow).getValues();

    var gamme = ssh.getRange(7,3).getValue();
    tsh.getRange(2,6).setValue(gamme);
    var dtotal = ssh.getRange(6,7).getValue();
    var htotal = ssh.getRange(7,7).getValue();
    var dAJ = ssh.getRange(9,7).getValue();
    var hAJ = ssh.getRange(10,7).getValue();
    tsh.getRange(4,7).setValue(dtotal + " - h" + htotal);
    tsh.getRange(5,7).setValue(dAJ + " - h" + hAJ);

    for (var i = 0; i < lrow; i++){
      if(i == 0){
        tss.getSheets()[0].setName(ref[i]);
        }
      else {
      tss.duplicateActiveSheet();
      tss.getSheets()[i].setName(ref[i]);
      }
    }
    
    for (var i = 0; i < lrow; i++){
      var sh = tss.getSheets()[i];
      sh.getRange(3,6).setValue(ref[i]);
    }

  }
  else{
  }

}

function getFirstEmptyRowByColumnArray(sheet,row) {
  
  var column = sheet.getRange(row + "3:" + row);
  var values = column.getValues(); 
  var ct = 0;
  while ( values[ct] && values[ct][0] != "" ) {
    ct++;
  }
  return (ct);
}

欢迎询问更多详情。

提前致谢,

我发现了错误,这是一个错误... 在 For 循环中复制并重命名新的 sheet,我使用了 :

  for (var i = 0; i < lrow; i++){

lrow 是我需要的最后一个引用的行号。这样不好,因为不等于数组长度,所以崩溃了。

相反,我必须使用 ref.length,ref 是基于 lrow 的引用数组。

  for (var i = 0; i < ref.length; i++){

感谢所有回答的人。