循环使用新名称(日期)多次复制工作表

Loop to copy sheets multiple times with new name (date)

我正在编写一个 Excel 工作簿,其中将包含每天的 sheet,以及各种工作时间、设备故障等的日志。

这个sheet,MASTER,应该复制到365(闰年366)sheets,每个按日期命名,从01-01-2022到31-12-2022 .

在每个 sheet 的一个单元格中,应输入日期。

现在,我录制了一个选择 sheet 的宏,复制它并将其移动到行尾,在适当的单元格中添加日期,然后将 sheet 重命名为一个日期。

function main(workbook: ExcelScript.Workbook) {
    let selectedSheet = workbook.getActiveWorksheet();
    // Duplicate worksheet
    let mASTER__2_ = selectedSheet.copy(ExcelScript.WorksheetPositionType.before, selectedSheet);
    // Reorder mASTER__2_
    mASTER__2_.setPosition(3);
    // Rename worksheet to "01-01-2022"
    mASTER__2_.setName("01-01-2022");
    let _01_01_2022 = workbook.getWorksheet("01-01-2022");
    // Set range Q1:T2 on _01_01_2022
    _01_01_2022.getRange("Q1:T2").setValue("01-01-2022");
}

我现在需要的是循环在给定年份的每一天重复的格式,以及如何设置变量,例如“myDate”,每次循环迭代都会增加一天,而不是上面示例中的硬编码日期。

虽然我们可以例行公事地在每个工作日结束(或开始)时复制母版 sheet,但我希望立即在一本工作簿中准备好全年。

这应该可以做到。

设置时

  • 确保您的 MASTER sheet 具有您想要显示的第一个日期(即 01-01-2022。在日期所在的任何单元格中(即 Q1
  • 您是要用日期填充一系列单元格吗?你的问题说“每个 sheet 的一个单元格”,而你的程序做了一系列 Q1:T2。请参阅代码中的注释。
  • 确保单元格 Q1 实际上是一个值(不是文本),并且在您希望显示 sheet 的显示格式中。根据您示例中的格式,它将是 mm-dd-yyyy.
  • sheet 名称中不允许使用斜杠 /,但如果您希望使用那种格式,我的程序会将它们换成破折号 -

测试时...

  • 您可能希望使用小于 365 的数字进行测试。
  • 该程序将删除并覆盖任何以 sheet 名称存在的先前日期的作品sheet。

代码:

function main(workbook: ExcelScript.Workbook) {
  const cellAddressWithDate = "Q1";
  const startingSheetName = "MASTER";
  const numberOfDays = 365;//<-- maybe start with 5?

  let startSheet = workbook.getWorksheet(startingSheetName);
  let theDate = startSheet.getRange(cellAddressWithDate).getValue();
  for (let i = 0; i < numberOfDays; i++) {
    let aCopy = startSheet.copy(ExcelScript.WorksheetPositionType.before, startSheet);
    aCopy.setPosition(startSheet.getPosition() + i);
    aCopy.getRange("Q1:T2").setValue(theDate + i);//<-- range or single cell?
    let newName = aCopy.getRange(cellAddressWithDate).getText().replace(/\//g, "-");
    workbook.getWorksheet(newName)?.delete();
    aCopy.setName(newName);
  }
}