Google Scripts日期差异,并将行追加到单独的标签中

时间:2017-07-14 20:07:37

标签: javascript java google-apps-script

*******我明白了。编辑代码现在它很棒!感谢您的反馈*****

我是一个新手编码器,我有一个借阅者信息的谷歌表。第一列包含收到信息的日期。我写的脚本需要能够判断是否在30天,45天,30-60天,60-90天和90天以上收到信息,然后将该行信息附加到Google工作表文档中的相应选项卡。这是我到目前为止所做的,但它没有用。

function myFunction() {
var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1zQHmusx0pcHz4EPYcdmrLeJarWI7LFw5fCVfYDsTL_k/edit#gid=0");
var headSS = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1pnXax3qv2ALswaLshUz6nXobV9e0W0qOOo_0n16r76Y/edit#gid=0");
var headCopy = headSS.getSheets()[0];
ss.setActiveSheet(ss.getSheets()[0]);
var headRows = headCopy.getDataRange().getValues();
var headRow = headRows[0];

for(var p = 1; p < 6; p++) {
    ss.setActiveSheet(ss.getSheets()[p]);
    ss.getDataRange().clear();
    ss.appendRow(headRow);
}

ss.setActiveSheet(ss.getSheets()[0]);
var dataRange   = ss.getDataRange();
var todayDate   = new Date();
var dateConv    = 1000*60*60*24;
var sheet       = ss.getSheets()[0]; 
var sheet30     = ss.getSheetByName('30day'); 
var sheet45     = ss.getSheetByName('45day'); 
var sheet3060   = ss.getSheetByName('30-60'); 
var sheet6090   = ss.getSheetByName('60-90'); 
var sheet90     = ss.getSheetByName('90+'); 


for ( var i = 0; i < dataRange.getNumRows(); i++){ 



    var range       = sheet.getRange(i+1, 1); 
    var loanDate    = range.getValue();
    var lDate       = Date(range);
    var msBetweenDates = todayDate - loanDate;
    var dateDiff    = msBetweenDates/dateConv;

    var spreadSheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1zQHmusx0pcHz4EPYcdmrLeJarWI7LFw5fCVfYDsTL_k/edit#gid=0');
    var sheetToCopy = spreadSheet.getSheets()[0];
    ss.setActiveSheet(ss.getSheets()[0])
    var rows = sheetToCopy.getDataRange().getValues();
    var row = rows[i];
  if (dateDiff < 31.0){
        sheet30.appendRow(row); 
    }
  if (dateDiff < 46.0){
        sheet45.appendRow(row); 
    }
  if (dateDiff > 30.0 && dateDiff < 61.0){
        sheet3060.appendRow(row);
    }
  if (dateDiff > 60.0 && dateDiff < 91.0){
        sheet6090.appendRow(row);
    }
  if (dateDiff > 89.0){
        sheet90.appendRow(row);
    }
}

}

1 个答案:

答案 0 :(得分:0)

好的,这里有很多问题,我们甚至可以排除故障。我编辑了你的帖子,使其更容易阅读,并移动了一些东西。

1)不要将不依赖于循环的变量放在循环中。这只是不必要地一遍又一遍地重新评估它们。我把一些东西移到了外面。

2)for(var p = 1; p < 2; p++) {不循环。它运行一次,p == 1

3)你确定ss.setActiveSheet(ss.getSheets()[p]);得到你想要的表吗?请记住,列表索引从0开始。

4)那么,您清除数据,然后获取数据范围?你确定吗?

5)日期对象不是数字。你不能把它分开来得到这一天。如果你想要获取日期之间的日期,你想先减去日期,得到毫秒,然后做算术:

var todayDate   = new Date();
var millisecondsBetweenDates = dateFromSheetField - todayDate;
daysBetweenDates = millisecondsBetweenDates / dateConv;

6)你的if-then排序搞砸了。例如在(dateDiff > 29.0) && (dateDiff < 61.0)中,29到46之间的dateDiffs已经在之前的条件(dateDiff < 46.0)中被击中,所以永远不会达到这个目的。对于接下来的2个相同。

7)你在这里想做什么:

var spreadSheet = SpreadsheetApp.openById(sheet.getId());

您基本上只是重命名sheet

我希望那些指针能让你朝着正确的方向前进。