循环使用新名称(日期)多次复制工作表
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);
}
}
我正在编写一个 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);
}
}