google编写日期差异脚本,并将行附加到单独的选项卡上

f8rj6qna  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(312)

**我想出来了。编辑代码现在它太好了!谢谢你的反馈

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

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);
    }
}

}

dxxyhpgq

dxxyhpgq1#

好吧,在我们排除故障之前,这里有很多问题。我编辑了你的文章,使它更容易阅读,并移动了一些东西。
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订单搞砸了。e、 g.英寸 (dateDiff > 29.0) && (dateDiff < 61.0) , dateDiffs 在29到46岁之间的人在前一个条件中已经被击中了: (dateDiff < 46.0) ,所以不会走这么远。接下来的两个也一样。
7) 你想在这里做什么: var spreadSheet = SpreadsheetApp.openById(sheet.getId()); ?
你基本上只是在重新命名 sheet 我希望那些指针能把你推向正确的方向。

相关问题