我正在Google表格中创建一个脚本,该脚本将复制活动表格并在同一工作簿中创建30个重复的表格。根据活动工作表上单元格中的值,每个重复的工作表将具有不同的名称。该单元格将包含一个日期;重复的工作表将使用单元格中列出的日期之后的日期名称。例如,单元格B3是“ 7/5/2019”。重复的工作表应命名为“ 2019年7月6日”(B3 + 1),“ 2019年7月7日”(B3 + 2)和“ 2019年7月8日”(B3 + 3),等等。
我使用的是已经嵌入在Google表格中的代码。其中一些是通过录制宏来创建的,而其他部分则是根据我对在线编码和研究的了解而创建的。
function duplicatesheet(){
//copy active sheet
var as = SpreadsheetApp.getActiveSpreadsheet()
SpreadsheetApp.getActiveSpreadsheet().duplicateActiveSheet();
//rename sheet
var myValue =
SpreadsheetApp.getActiveSpreadsheet().getRange('B3').getValue();
SpreadsheetApp.getActiveSpreadsheet().renameActiveSheet(myValue);
}
该代码可一次复制活动工作表,但不会重复30次。如上所述,它也不根据单元格B3中列出的日期正确重命名工作表。我需要帮助创建可以完成这两项任务的代码。
答案 0 :(得分:2)
对此进行了编辑。注释。您还可以看到Tedinoz的出色回答。
尝试以下代码:
function duplicatesheet() {
var as = SpreadsheetApp.getActiveSpreadsheet(); // active spreadsheet
var s = as.getActiveSheet(); // first sheet object
var dateCell = "B3"; // cell containing first date
var N = 30; // number of copies to make
var startDate = new Date(s.getRange(dateCell).getValue()); // get the date stored in dateCell
var day = startDate.getDate(); // extract the day
var month = startDate.getMonth(); // extract the month
var year = startDate.getFullYear(); // extract the year
// loop over N times
for (var i = 0; i < N; i++) {
var asn = s.copyTo(as); // make a duplicate of the first sheet
var thisSheetDate = new Date(year, month, day+(i+1)); // store the new date as a variable temporarily
asn.getRange(dateCell).setValue(thisSheetDate); // writes the date in cell "B3"
asn.setName(Utilities.formatDate(thisSheetDate, undefined, "MMMMM d, yyyy")); // sets the name of the new sheet
}
}
我建议将N=30
放在较小的地方,例如N=2
,看看它是否首先适合您的格式。
Utilities.formatDate()
方法在这里使用的格式,我假设它是MMMMM d, yyyy
,它将以以下格式打印选项卡名称:
2019年7月6日
您可以根据下面的参考文献[3]随意更改。
您可以在此处查看所有使用的功能的参考:
答案 1 :(得分:1)
此代码采用OP在工作表名称的单元格“ B3”中输入的单个日期,例如“ Sheet1;它循环三十次,创建初始电子表格的副本,将基于数据的工作表名称每增加1天时间。
为确保准确的日期数学,建议“ B3”单元格的格式应与建议的工作表名称相同(“ MMMM dd,yyyy”)。
function so5691088602(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetname = "Sheet1";
var basesheet = ss.getSheetByName(sheetname);
var newSheetName = new Date(basesheet.getRange("B3").getValue());
var NumDups = 30;
for (var i=0;i<NumDups;i++){
basesheet.activate;
var tempDate = new Date();
var printdate01 = Utilities.formatDate(new Date(tempDate.setDate(newSheetName.getDate()+1+i)), "GMT+10", "MMMM dd, yyyy");
// Logger.log("DEBUG: Sheet Date = "+printdate01);
ss.insertSheet(printdate01, {template: basesheet});
}
}
屏幕截图