根据日期从模板复制 Sheet 到新工作簿
Copy Sheet to new workbook from template based on date
我在工作簿中有一个模板 sheet,我想将其复制到尚未创建的新工作簿。我希望在每个月的 29 日 运行 执行以下操作:
- 使用 Spreadsheet 命名为“Template”,sheet 命名为“Template..2020”。
- 创建一个名为“2020 年 12 月”的新 Spreadsheet,并将第一个选项卡重命名为 12.01.20,然后我可以复制并重命名该月的每一天。
我尝试了一些带有时间触发器的复制功能,但它们需要打开一个空白工作簿。
示例脚本
这个脚本
- 函数
createSheetFromTemplate
- 使用date object获取有关今天日期的信息并提取年、月、日等
- 使用
SpreadsheetApp.openById
从另一个 sheet 获取模板
- 根据今天的信息创建一个新的 Sheet。
- 复制模板 sheet 并根据日期重命名。
- 函数
createTrigger
- 使用 ClockTriggerBuilder,在每个月的 29 日创建一个 运行 的触发器。
免责声明:目前此脚本仅创建一个新的 Spreadsheet,其中包含今天的月份和一个新的 sheet,并以今天的日期命名。我了解到您可能希望为 下 个月创建一个 sheet。这个问题可能最好由另一个问题解决 - 也许看 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();
}
参考资料
我在工作簿中有一个模板 sheet,我想将其复制到尚未创建的新工作簿。我希望在每个月的 29 日 运行 执行以下操作:
- 使用 Spreadsheet 命名为“Template”,sheet 命名为“Template..2020”。
- 创建一个名为“2020 年 12 月”的新 Spreadsheet,并将第一个选项卡重命名为 12.01.20,然后我可以复制并重命名该月的每一天。
我尝试了一些带有时间触发器的复制功能,但它们需要打开一个空白工作簿。
示例脚本
这个脚本
- 函数
createSheetFromTemplate
- 使用date object获取有关今天日期的信息并提取年、月、日等
- 使用
SpreadsheetApp.openById
从另一个 sheet 获取模板
- 根据今天的信息创建一个新的 Sheet。
- 复制模板 sheet 并根据日期重命名。
- 函数
createTrigger
- 使用 ClockTriggerBuilder,在每个月的 29 日创建一个 运行 的触发器。
免责声明:目前此脚本仅创建一个新的 Spreadsheet,其中包含今天的月份和一个新的 sheet,并以今天的日期命名。我了解到您可能希望为 下 个月创建一个 sheet。这个问题可能最好由另一个问题解决 - 也许看 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();
}