2017-07-14 3 views
0

*******私はそれを理解しました。コードを編集してすぐにうまくいく!フィードバック*****Google Scriptsの日付の違いと別のタブに行を追加する

イム初心者コーダのためのおかげで、私は、借り手の情報をGoogleのシートを持っています。最初の列には情報が受信された日付が表示されます。スクリプトの作成は、情報が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)日付オブジェクトは数字ではありません。あなたはそれを分割して1日を得ることはできません。

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

6)あなたの順序を台無しにされた場合、その後:あなたは日の日付の間に取得しようとしている場合は、ミリ秒を取得するには、最初の日付を減算したい、そして、算術演算を実行します。例えば(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

関連する問題