根据日期从模板复制 Sheet 到新工作簿

Copy Sheet to new workbook from template based on date

我在工作簿中有一个模板 sheet,我想将其复制到尚未创建的新工作簿。我希望在每个月的 29 日 运行 执行以下操作:

我尝试了一些带有时间触发器的复制功能,但它们需要打开一个空白工作簿。

示例脚本

这个脚本

  • 函数createSheetFromTemplate
    • 使用date object获取有关今天日期的信息并提取年、月、日等
    • 使用 SpreadsheetApp.openById
    • 从另一个 sheet 获取模板
    • 根据今天的信息创建一个新的 Sheet。
    • 复制模板 sheet 并根据日期重命名。
  • 函数createTrigger

免责声明:目前此脚本仅创建一个新的 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();
}

参考资料