我有一个每周更新的数据表。我想要一个脚本来复制工作表并用当前日期重命名它。目标是在工作表更新之前每周将数据保存在工作表中,这样我就有了数据记录。这是我目前为止的脚本:
/** @OnlyCurrentDoc */function myFunction() {
let sh, temp_one_values;
sh = SpreadsheetApp.getActive();
temp_one_values = transpose_(sh.getSheetByName('Complete Tutoring Roster').getRange('A1:Z1000').getValues());
{temp_one.copyTo(sh).setName(szToday);
}
}
function transpose_(array) {
return Object.keys(array[0]).map(function (col) {
return array.map(function (row) {
return row[col];
});
});
}
function CopyDataSheet() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1').activate();
spreadsheet.duplicateActiveSheet();
spreadsheet.getActiveSheet().setName('11/19/2020');
};
我用录制一个宏来获取脚本。
我知道我需要编辑setName
代码。但我不知道如何对其进行编码以提取当前日期。
说明:
-
您只需要以所需格式获得今天的日期:
MM/dd/yyyy
:const today = Utilities.formatDate(new Date(), spreadsheet.getSpreadsheetTimeZone(), "MM/dd/yyyy");
-
然后使用copyTo(电子表格(方法将表格复制到现有的电子表格中,然后用今天的日期命名:
sheet.copyTo(spreadsheet).setName(today);
-
您不需要激活范围或工作表。这是一个由宏生成的逻辑,但它会使代码混乱且效率低下。使用
getSheetByName
根据图纸名称获取所需图纸,而不是获取活动图纸。
解决方案:
在此解决方案中,将Sheet1
更改为要复制的图纸的名称。
function CopyDataSheet() {
const spreadsheet = SpreadsheetApp.getActive();
const sheet = spreadsheet.getSheetByName('Sheet1');
const today = Utilities.formatDate(new Date(), spreadsheet.getSpreadsheetTimeZone(), "MM/dd/yyyy");
sheet.copyTo(spreadsheet).setName(today);
};