我有一个非常基本的脚本,它接受一个单元格值,这是一个日期。然后重命名标签“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"));
}
}
为什么处理出错?
答案 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"));
}
}
希望这有帮助!