制作按钮将列中的所有日期增加 1 Google Sheets Apps 脚本

问题描述 投票:0回答:1

我有一个电子表格,我需要增加范围内的日期 '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]

javascript date range multiple-columns spreadsheet
1个回答
0
投票

从评论中的讨论来看,我相信您的目标如下。

  • 您在 Google 电子表格中有一个工作表。该工作表的单元格中包含日期对象
    'G5:G27','T5:T27','AG5:AG27','AT5:AT27'
  • 您想要为单元格中的所有日期对象添加 1 个月。
  • 您想要通过单击工作表上的按钮来运行脚本。

在这种情况下,下面的示例脚本怎么样?

示例脚本:

在该脚本中,为了降低处理成本,使用了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']
    的相同范围内。
参考资料:

  • 方法:spreadsheets.values.batchGet
  • 方法:spreadsheets.values.batchUpdate
© www.soinside.com 2019 - 2024. All rights reserved.