【问题标题】:Copy Sheet to new workbook from template based on date根据日期将工作表从模板复制到新工作簿
【发布时间】:2021-02-28 03:47:07
【问题描述】:
我在工作簿中有一个模板表,我想将其复制到尚未创建的新工作簿中。我希望它在每个月的 29 日运行并执行以下操作:
- 获取名为“Template”的电子表格和名为“Template..2020”的工作表。
- 例如,创建一个名为“2020 年 12 月”的新电子表格,并将第一个选项卡重命名为 12.01.20,然后我可以复制并重命名该月的每一天。
我尝试了一些带有时间触发器的复制功能,但它们需要已经打开一个空白工作簿。
【问题讨论】:
标签:
google-apps-script
google-sheets
copy
rename
google-workspace
【解决方案1】:
示例脚本
这个脚本
- 函数
createSheetFromTemplate
- 函数
createTrigger
免责声明:目前,此脚本仅创建一个包含今天月份的新电子表格和一个以今天日期命名的新工作表。我了解到您可能希望为下个月创建一张工作表。这个问题可能最好由另一个问题来解决 - 也许看看here。
function createSheetFromTemplate() {
// Getting details of today's date
let date = new Date()
let year = date.getFullYear()
let month = date.getMonth() + 1
let monthName = date.toLocaleString('default', { month: 'long' });
let day = date.getDate()
console.log(year, monthName, day)
// Get template based on year
let templateSpread = SpreadsheetApp.openById("1H7GBVxK4f0nmYR5xfZawy6nreDTCZaj76-dKE9eOtUE")
let templateSheet = templateSpread.getSheetByName("Template_" + year)
// Create new Spreadsheet with renamed template
let newSpread = SpreadsheetApp.create(monthName + " " + year)
let newSheet = templateSheet.copyTo(newSpread).setName(year.toString().substring(2,4) + "." + month + "." + day)
let sheetToDelete = newSpread.getSheetByName("Sheet1")
newSpread.deleteSheet(sheetToDelete)
}
// Create trigger to run on 29th of each month.
function createTrigger() {
ScriptApp.newTrigger('createSheetFromTemplate')
.timeBased()
.onMonthDay(29)
.create();
}
参考文献