如何添加公式 TODAY() 以在应用程序脚本中对两个日期之间的验证进行编程

How to add the formula TODAY() for programming a validation between two dates in apps script

提问人:Luis Fernando Medina Iglesias 提问时间:11/18/2023 最后编辑:TheMasterLuis Fernando Medina Iglesias 更新时间:11/18/2023 访问量:44

问:

我有一个表格,我们在其中添加了在站点中发生的失败(用于工作项目),要添加的第一个日期是扩展日期,第二个是注意日期,我希望关注日期介于扩展日期和今天之间,因为显然你不能说你将来参加了一个站点。

问题是,当我在 Google 表格中进行验证时,我可以轻松地输入我想要的两个值,即单元格“D10”和公式“TODAY()”,这工作得很好,但我在应用程序脚本中制作了一个表单,因此这些验证必须由代码自动添加,所以我录制了一个宏以查看它在代码中的工作原理,我得到了这个:

spreadsheet.getRange('H10').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(false)
  .setHelpText('Introduce una fecha entre el =D10 y el =HOY()')
  .requireDateBetween(new Date(1899, 11, 30), new Date(1899, 11, 30))
  .build());

代码是西班牙语的,因为这是我使用的语言)但正如你所看到的,验证的描述说它在'D10'和'HOY()'(TODAY())之间,但在'requireDateBetween'中,它使用完全相同的日期作为开始和结束: '1899, 11, 30', 我不得不再次说,验证工作得很好, 但是再次使用它没有效果,无论如何,我修改了它以在另一个单元格中使用它,并在该单元格中通过代码进行验证:

var ss= SpreadsheetApp.getActiveSpreadsheet()
  var form= ss.getSheetByName('REGISTRAR_FALLA')

  form.getRange('H11').setDataValidation(SpreadsheetApp.newDataValidation().setAllowInvalid(false).setHelpText('Introduce una fecha entre el =D10 y el =HOY()').requireDateBetween(new Date(form.getRange('D11').getValue()), new Date()).build());

因此,使用这样的代码,我从单元格“D11”中获取开始日期,并从今天的日期到结束,但是今天的日期不像“TODAY()”公式那样工作,所以明天它不会更新,它仍然会保留在今天的日期,我上传了一些图片,以便您可以看到它在Google表格中的显示方式:

Validación hecha con el propio google sheets y validación hecha con apps script

所以我想知道的是,是否可以将代码中的该公式添加到验证中,以便对其进行更新。

验证 google-apps-script google-sheets

评论

0赞 TheWizEd 11/18/2023
你试过吗?.requireDateBetween(new Date(1899, 11, 30), new Date());
0赞 Luis Fernando Medina Iglesias 11/18/2023
这有点像我所做的修改,但是会发生什么?,如果我今天添加一个失败,明天我参加它,我将不得不把 18/11/2023,但它会给我错误,因为限制是今天(17/11/2023)

答:

0赞 TheMaster 11/18/2023 #1

您可以通过 .requireFormulaSatisfied 使用自定义公式数据验证:

.requireFormulaSatisfied(`=ISBETWEEN(H2,0,TODAY())`)

确保与应用数据验证的范围相同。H2

评论

1赞 Luis Fernando Medina Iglesias 11/20/2023
哇,谢谢,从来没有强硬过这个公式,因为我使用西班牙语的谷歌表格,我有点只知道西班牙语的公式,尽管有一些英语效果很好(不知道为什么它们没有被翻译)。同样,它工作得很好,只需要将“,”改为“;”