我有一个电子表格,我需要增加范围内的日期 'G5:G27','T5:T27','AG5:AG27','AT5:AT27' 一个月后。我想创建一个按钮来运行此脚本,因为我将复制该工作表,然后希望只需按该按钮即可将所有日期更新 1 个月。
我只是创建一个公式来增加上一张工作表的日期,但工作表的另一个单元格依赖于日期单元格。如果我使用公式,读取日期单元格的单元格不会将其读取为日期。
我可以编写代码,但一次只能执行一个单元格,这效率不高。
任何帮助将不胜感激!谢谢!
我尝试使用 rangelist 并执行 for while 或 foreach 循环,但我只能让它列出下面所有单元格顶部单元格中的日期。
我已经改变了我的代码太多,我什至无法让它再次工作。
编辑: 这是我到目前为止所拥有的。我可以将日期复制到下一列,但我不知道如何在日期中添加一个月。
function date()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet11');
var date = new Date();
var valuestocopy = sheet.getRange(1, 5, 25, 1);
var copyto = sheet.getRange(1, 6, 25, 1);
sheet.getRange(copyto.getA1Notation()).setValue(date).setNumberFormat("M/D/YY");
copyto.setValues(valuestocopy.getValues());
}
[![在此处输入图像描述][2]][2]
从评论中的讨论来看,我相信您的目标如下。
'G5:G27','T5:T27','AG5:AG27','AT5:AT27'
。在这种情况下,下面的示例脚本怎么样?
在该脚本中,为了降低处理成本,使用了Sheets API。因此,在运行脚本之前,请在高级 Google 服务中启用 Sheets API。并且,请设置您的工作表名称。并且,请确认您的细胞范围a1Notation
。为了通过单击工作表上的按钮来运行此脚本,请将功能
date
分配给您的按钮。这样,当您单击按钮时,就会运行该脚本。
function date() {
var sheetName = "Sheet1"; // Please set your sheet name.
var a1Notations = ['G5:G27', 'T5:T27', 'AG5:AG27', 'AT5:AT27']; // This is from your question.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var ranges = a1Notations.map(e => `'${sheetName}'!${e}`);
var { valueRanges } = Sheets.Spreadsheets.Values.batchGet(ssId, { ranges, valueRenderOption: "UNFORMATTED_VALUE" });
var data = valueRanges.map(({ values }, i) => {
var values = values.map(([v]) => {
var unixTime = (v - 25569) * 86400 * 1000; // Ref: https://stackoverflow.com/a/6154953
var temp = new Date(unixTime);
temp.setMonth(temp.getMonth() + 1);
var serialNumber = (temp.getTime() / 1000 / 86400) + 25569; // Ref: https://stackoverflow.com/a/6154953
return [serialNumber];
});
return { range: ranges[i], values };
});
Sheets.Spreadsheets.Values.batchUpdate({ data, "valueInputOption": "USER_ENTERED" }, ssId);
}
['G5:G27', 'T5:T27', 'AG5:AG27', 'AT5:AT27']
检索单元格值(日期对象)。并且,将 1 个月添加到这些值中。然后,将更新后的值放入
['G5:G27', 'T5:T27', 'AG5:AG27', 'AT5:AT27']
的相同范围内。