*******我明白了。编辑代码现在它很棒!感谢您的反馈*****
我是一个新手编码器,我有一个借阅者信息的谷歌表。第一列包含收到信息的日期。我写的脚本需要能够判断是否在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);
}
}
}
答案 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
我希望那些指针能让你朝着正确的方向前进。