使用日期值进行数学运算

时间:2016-10-27 20:28:39

标签: google-apps-script google-sheets

我正在尝试使用Google表格中两个日期之间的差异来确定将复制originRange的行数。

我收到错误'无法将NaN转换为(类)'因此我假设我需要在公式的某些部分更改日期的格式,但我完全陷入困境。

Google表格中的日期格式为“10/26/2016”& “12/31/2016”如果这有帮助的话。

function fillNewReport () { 
  var startDate = responseSheet.getRange('C2');
  var endDate = responseSheet.getRange('G2');
  var dateDiff = (endDate - startDate) + 1;
  var newReport = ss.getSheetByName('Copy of Form Responses 1');
  var originRange = newReport.getRange(2,2,1,22);
  var newRange = newReport.getRange(2,2,dateDiff,22);
  originRange.copyTo(newRange);
}

对此的任何帮助将不胜感激。

谢谢,

编辑:第2部分

我认为我现在有正确的格式,因为我不再收到错误。但该公式没有回应。没有正在复制的行。有什么建议吗?

function fillNewReport () { 
  var startDateValue = responseSheet.getRange('C2').getValue();
  var endDateValue = responseSheet.getRange('G2').getValue();
  var startDateMilli = new Date(startDateValue);
  var endDateMilli = new Date(endDateValue);
  var startDate = startDateMilli.getDate();
  var endDate = endDateMilli.getDate();
  var dateDiff = (endDate - startDate) + 1;
  var newReport = ss.getSheetByName('Copy of Form Responses 1');
  var originRange = newReport.getRange(2,2,1,22);
  var newRange = newReport.getRange(2,2,dateDiff,22);
  originRange.copyTo(newRange);
}

1 个答案:

答案 0 :(得分:2)

在您的代码中startDateendDate 范围,而不是

首先,要使用getValue()来改变它。

然后,您将获得不会按预期运行的日期对象,因为与电子表格中的日期不同,javascript日期对象是更复杂的对象,它们具有日期和时间属性,并且具有自引用日期以来毫秒数的本机值。 。 无论如何,您所要做的就是使用互联网上所有javascript参考中描述的日期方法,ask Google for "JS DATE"

然后做你需要的数学,我认为这部分很容易。

修改

正如我在评论中所写,我不确定我明白你想得到什么结果...... 我尝试了一个改变一些细节的测试,我得到了一个结果......你告诉我这是不是你想要的。

function fillNewReport () { 
  var startDateValue = responseSheet.getRange('C2').getValue();
  var endDateValue = responseSheet.getRange('G2').getValue();
  var startDateMilli = new Date(startDateValue);
  var endDateMilli = new Date(endDateValue);
  Logger.log('startDateMilli = '+startDateMilli+'  endDateMilli = '+endDateMilli);
  var startDate = startDateMilli.getDate();
  var endDate = endDateMilli.getDate();
  var dateDiff = (endDate - startDate) + 1;
  Logger.log('dateDiff = '+dateDiff);
  var newReport = ss.getSheetByName('Copy of Form Responses 1');
  var originRange = newReport.getRange(2,2,1,22);
  var newRange = newReport.getRange(2,2,dateDiff,22);
  originRange.copyTo(newRange);
}

或像这样只复制一行

  ...
  var originValues = newReport.getRange(2,2,1,22).getValues();
  Logger.log('originValues = '+originValues);
  var newRange = newReport.getRange(2+dateDiff,2,1,22); // copies to the other sheet but dateDiff rows underneath...
  newRange.setValues(originValues);
  }