我得到了一个脚本,创建一个新的选项卡,并将名称更改为今天的日期。但是如果再次运行脚本,则显示一个错误,因为选项卡名称已经存在。总之,我可以将第一个重命名为今天日期,其余的重命名为"- 1"。或者"- 2"。这就是我现在创建的新选项卡并将名称改为今天的
function changeDate() { //Add sheet and name with todays date
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1:AO102').activate();
spreadsheet.insertSheet(1);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var tz = ss.getSpreadsheetTimeZone();
var sheets = ss.getSheets();
var date = Utilities.formatDate(new Date(), tz, 'MM-dd-yyyy');
sheets[1].setName(date);
可以使用递归的try...catch
循环到setName()
。
代替
sheets[1].setName(date);
const tcloop = ((i) => (func) => {
try {
func(i);
} catch (e) {
++i;
tcloop(func);
}
})(0);
tcloop((i)=>sheets[1].setName(`${date}${i > 0 ? -i : ""}`))
描述
下面是一个示例脚本,说明如何使用后缀号重命名工作表,以避免使用已经存在的名称重命名工作表。
Code.gs
function insertSheet() {
try {
let ss = SpreadsheetApp.getActiveSpreadsheet();
let tz = ss.getSpreadsheetTimeZone();
let name = Utilities.formatDate(new Date(), tz, 'MM-dd-yyyy');
let sheets = ss.getSheets();
// get sheets that include today's date at the start of the name
sheets = sheets.filter( sheet => sheet.getName().indexOf(name) === 0 );
if( sheets.length > 0 ) {
let min = 0;
// get the lowest number suffix (i.e. -3, -2, -1)
sheets.forEach( sheet => {
let i = parseInt(sheet.getName().slice(name.length));
min = i < min ? i : min;
}
);
// now rename starting from lowest number (i.e. -3)
while( min < 1 ) {
let rename = min === 0 ? name : name+min;
let sheet = ss.getSheetByName(rename);
if( sheet ) {
sheet.setName(name+(min-1));
}
min++;
}
}
let sheet = ss.insertSheet(1);
sheet.setName(name);
}
catch(err) {
console.log(err);
}
}
引用
- Array.filter ()
- String.indexOf ()
- Array.forEach ()
- String.slice ()
- 方法用于()