繁体   English   中英

JavaScript,Google 表格脚本 - 日期比较问题

[英]JavaScript, Google Sheets script - problem with date comparing

我是 Apps Script 的新手,以前从来没有机会写过 JavaScript。 因此,我在 Google 的一张表格中有一个关于客户个人信息(ID、姓名、邮件、联系方式)的数据集。 我在另一张关于客户付款的表格中有另一个数据集(第一期付款的付款日期,第二期付款的日期和金额。最后一张关注的是与未付账单有关的第三张。现在,我想要什么是将有关个人信息的列从第一张表复制到第三张。这里的条件是仅复制第二期付款日期与今天()之间的差异大于 45 的客户的信息。这就是我所拥有的试过:


function Neplacena2Novi() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheetFrom=ss.getSheetByName("Podaci o polaznicima"); //Data entry Sheet
var sheetTo=ss.getSheetByName("Neplaceni racuni"); //Data Sheet
var condition=ss.getSheetByName("Uplate novoupisani");
var range1=ss.getRangeByName("Prva rata");
var range2=ss.getRangeByName("Druga rata");


var startRow=3;
var endRow=ss.getLastRow();

function Neplacena2Novi(){
  for var(i=startRow; i<(endRow+1)< i++) {
  var startDate=new Date(condition.getRange(range1+1).getValue());
  var endDate= new Date(condition.getRange(range2+1).getValues());
  
  var difference=parseInt(endDate-startDate)/1000); //Dates are in format dd.mm.yyyy.
      if(difference>45){

      var values=sheetFrom.getRange(2, 1, sheetFrom.getLastRow(), 4).getValues();

      sheetTo.getRange(3,1,1184,4).setValues(values);
      }
}
var ui = SpreadsheetApp.getUi();
var potvrda = ui.alert("Odredili ste lica koja treba da se pozovu.");
}


function DugmeDodajKlijenta (){
var ui = SpreadsheetApp.getUi();

}

这段代码有效,但我没有在工作表中得到任何东西。 而且我现在不知道如何将 today() function 包含在差异公式中。 但我真正想要的是创造一个条件,即今天()-startDate()会有所不同。

有人可以帮帮我吗?

该代码不起作用,因为endDate不是原始值而是二维数组。 使用Range.getValue()而不是Range.getValues() ,如下所示:

  const startDate = new Date(condition.getRange(row, startDateColumn).getValue());
  const endDate = new Date(condition.getRange(row, endDateColumn).getValue());

...但这还不足以使代码正常工作。 for循环行中存在语法错误,循环中未引用i变量。 整个事情效率很低,因为它逐行读取和写入数据,而不是只进行一次读取和一次写入。

除非电子表格中的“日期”不是数字日期而是看起来像日期的文本字符串,否则new Date()调用是多余的。 parseInt()调用也是多余的(另外,它缺少 radix 参数。)

JavaScript 日期内部包含自 1970 年 1 月 1 日 0:00 UTC 以来经过的毫秒数。 要获得两个日期之间的差异,请尝试(endDate-startDate) / 1000 / 60 / 60 / 24 请注意,有许多警告 - 请参阅Date

整个循环可以替换为Range.getValues().filter() 看起来代码最好完全重写。

不清楚为什么首先需要一个脚本,因为使用例如filter()query()的电子表格公式也可以做到这一点。 个人信息可以通过查找例如arrayformula(vlookup())添加到丢失的付款数据中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM