2017-07-14 26 views
0

*******我想通了。現在編輯代碼,它效果很好!感謝您的反饋*****谷歌腳本日期的差異,並追加行到單獨的標籤

即時新手編碼器,我有一個谷歌表與借款人信息。第一列有收到信息的日期。腳本即時編寫需要能夠判斷信息是在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

這與Java有什麼關係? – shmosel

回答

0

OK,有很多的問題在這裏,之前我們甚至可以解決。我編輯了你的文章,以便閱讀並移動一些內容。

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),dateDiffs之間的29和46之間已經在以前的條件中被擊中:(dateDiff < 46.0),所以永遠不會得到這麼遠。同爲接下來的2

7)什麼是你想在這裏做的:

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

你基本上是剛剛更名sheet

我希望這些指針輕移你在正確的方向。

+0

感謝您的幫助。基本上我想清除除第一個選項卡外的每個數據選項卡。該程序需要檢查第一個選項卡的第一列,並確定該行是否少於30天,如果是,則將該行復制到30day選項卡,確定該行是否少於45天,如果是,則將其複製到45天標籤,30-60,60-90和90+等idk,如果這澄清任何東西。即時通訊對這些論壇也非常新,我不知道如何向您展示我的更新代碼......感謝您的耐心等待 – Dickie