使用单元格值重命名工作表

时间:2018-02-26 13:22:51

标签: google-apps-script google-sheets date-formatting

我有一个非常基本的脚本,它接受一个单元格值,这是一个日期。然后重命名标签“day,dd / mm / yyyy”。

该脚本已经使用了几周的相应日期精确重命名工作表,但突然出现了19/03/2018以后的问题。这个剧本突然似乎在复制,丢失或在某个地方获得了一天。我怀疑我没有解释得这么好,但它让我疯了。

脚本是;

function renameSheetsByTheContentsOfCellA1onEachSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var sheetNumber, sourceSheet, newSheetName;

  // iterate through all sheets in the spreadsheet
  for (sheetNumber = 1; sheetNumber < sourceSheets.length; sheetNumber++) {
    sourceSheet = sourceSheets[sheetNumber];
    // get contents of cell A2
    newSheetName = sourceSheet.getRange("A2").getValue();
    // rename sheet
    sourceSheet.setName(Utilities.formatDate(newSheetName, "GMT", "EEEEE, dd/MM/yyyy"));
  }
}

为什么处理出错?

1 个答案:

答案 0 :(得分:0)

您很可能将无效的日期类型传递给.formatDate函数(requires a Date, String, String),具体取决于工作表中A2值的格式。为防止这种情况,您应该先将 newSheetName 转换回脚本中的new Date(),然后再将其传递给该函数。值得注意的是,如果你的所有A2值都被正确地格式化为日期,这应该不是问题 - 你可能想要检查它(很可能它们被格式化为“纯文本”,这使它们成为一个字符串)。

此外,如果您希望脚本也适用于第一张工作表,则需要在for开始0循环(由于0索引编号)。我修改了您的代码以解决以下这些更改:

function renameSheetsByTheContentsOfCellA1onEachSheet() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var sheetNumber, sourceSheet, newSheetName;

  // iterate through all sheets in the spreadsheet
  for (sheetNumber = 0; sheetNumber < sourceSheets.length; sheetNumber++) {
    sourceSheet = sourceSheets[sheetNumber];
    // get contents of cell A2
    newSheetName = new Date(sourceSheet.getRange("A2").getValue());
    // rename sheet
    sourceSheet.setName(Utilities.formatDate(newSheetName, "GMT", "EEEEE, dd/MM/yyyy"));
  }

}

希望这有帮助!