【问题标题】:Google spreadsheet: Add days to date set by inputBox, fill rangeGoogle电子表格:将日期添加到由inputBox设置的日期,填充范围
【发布时间】:2013-10-01 19:51:40
【问题描述】:

如何根据 inputBox 设置的 startDate 填充 Google 电子表格中的范围?基本上,(1)用户输入 startDate; (2) 脚本从 startDate 开始填充单元格 A1 到 A13,每行添加 7 天。

这是我尝试做的:

var startDate = Browser.inputBox('What is the start date?', Browser.Buttons.OK_CANCEL);
for (var k = 0; k < (13); k++) {
  sheet.getRange((k+1),1).setValue(startDate + k * 7);
}

不幸的是,我认为 setValue 将 startDate 视为字符串?因此,对于框中输入 15/10/2013 和格式化为 dd-mmm-yyyy 的单元格,这些单元格将填充 15-Oct-20130、15-Oct-20137、15-Oct-201314 等等.我希望是 2013 年 10 月 15 日、2013 年 10 月 22 日、2013 年 10 月 29 日等等。帮忙?

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    您可以利用 UIApp 的专用小部件来选择开始日期,并使用电子表格公式来创建日期序列(您知道电子表格中的 =date+7 会自动给出 7 天后的日期。

    这是怎么回事:

    function dateSequence() {
      var app = UiApp.createApplication().setTitle('Choose a start Date').setHeight('100').setWidth('200');
      var date = app.createDateBox().setName('date').setValue(new Date());
      var clickHandler = app.createServerHandler('setDate').addCallbackElement(date);
      app.add(date).add(app.createButton('submit', clickHandler));
      SpreadsheetApp.getActive().show(app)
    }
    
    function setDate(e){
      var app = UiApp.getActiveApplication().close();
      var sheet = SpreadsheetApp.getActiveSheet();
      sheet.getRange(1,1).setValue(e.parameter.date);
      for (var k = 1; k < 13; k++) {
        sheet.getRange((k+1),1).setFormula("= (A"+k+")+"+7);
      }
      return app;
    }
    

    【讨论】:

    • 谢谢!使用 setFormula() 是一个很好的提示。不过,我想要单元格中只有值的内容,所以我最终做的是(1)使用 setFormula() 用正确的日期填充单元格;然后 (2) 运行一个 getValues() 后跟一个 setValues() 用于相同的范围以用值替换公式。哦,我没有打扰 UiApp,只是使用了原来的 Browser.inputBox 。有点蛮力,但解决了。
    • 如您所愿...如果其他人必须填写正确的日期格式,使用浏览器输入可能会很危险,但这取决于您...:-) 请考虑接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    相关资源
    最近更新 更多