2017-07-14 56 views
0

大家好我不擅長腳本,只需要一些幫助,我想要做的是複製和重複單元格a,b,c,d,e,基於信息在單元格F和G.谷歌腳本來複制和重複行

在單元格d和e是日期和他們需要增加單元格中的值,並繼續重複基於G中的值,我做了一個示例工作表,在工作表輸入是數據,並在表格輸出它顯示我需要的結果。但是所有信息都需要保留在輸入表單上,而不是其他表單。希望你能理解我看到樣本表的含義。在單元格f的表格中,它表示幾周後,這會在幾周後變好。

Title Description  Location  Start Time  End Time  repeate every how many times to repeat                    
test tester   here   9/7/17 20:00 9/7/17 20:10 2 weeks  4                   
fake data   home   15/7/17 15:00 15/7/17 16:00 4 weeks  3 

original Google sheet

我想獲得的總體目標是當一個表單提交能夠重複事件自動添加到谷歌日曆腳本,但如果我可以重複我需要在數據然後我可以設置基於天的重現事件,因爲我相信日曆的重複事件只讓你每天每週做一次..

或者任何人都可以指向我網站,我可能會找到一些信息來幫助我嗎?

+0

任何人都可以點我到一個網站,我可以找到一些信息來幫助我嗎? – Ditch1983

回答

0

我把重複改爲幾天而不是幾周。

function repeatingEvents() 
{ 
    var ss=SpreadsheetApp.getActiveSpreadsheet(); 
    var sht=ss.getSheetByName('Repeat'); 
    var rng=sht.getDataRange();//Get all of the data on the sheet 
    var rngA=rng.getValues(); 
    var day=86400000;//milliseconds in a day 
    var week=604800000;//millisecond in a week 
    for(var i=0;i<rngA.length;i++) 
    { 
     if(rngA[i][6]>0)//If the number of repeats is greater than zero 
     { 
     var cnt=Number(rngA[i][6]);//cnt is number of repeats 
     for(var n=0;n<cnt;n++) 
     { 
      var row=[]; 
      row.push(rngA[i][0]);//column A 
      row.push(rngA[i][1]);//column B 
      row.push(rngA[i][2]);//column C 
      row.push(new Date(rngA[i][3].getTime() + (rngA[i][5] * (n + 1) * day)));//old date time plus repeat duration * repeat count * milliseconds in a day in column D 
      row.push(new Date(rngA[i][4].getTime() + (rngA[i][5] * (n + 1) * day)));//column E 
      row.push(rngA[i][5]);//Column F 
      row.push('');//column G get zeroed out so script won't come back and do it again without human interaction 
      sht.appendRow(row);//add new event 
     } 
     sht.getRange(i+1,7).setValue(0);//zero out initial number of repeats because I use this to determine when repeats are required 
     } 
    } 
    sht.getRange(2,1,sht.getLastRow(),sht.getLastColumn()).sort({column:4,ascending:true});//Sort Spreadsheet by starting date 
} 

這是我的電子表格的樣子。

enter image description here

好吧,我改變了代碼以適應您最近添加的ID的變化。它已經在您的電子表格中,我在這裏重複。爲參考目的。

function repeatingEvents() 
{ 
    var ss=SpreadsheetApp.getActiveSpreadsheet(); 
    var sht=ss.getSheetByName('input'); 
    var rng=sht.getDataRange();//Get all of the data on the sheet 
    var rngA=rng.getValues(); 
    var day=86400000;//milliseconds in a day 
    var week=604800000;//millisecond in a week 
    for(var i=0;i<rngA.length;i++) 
    { 
     if(rngA[i][7]>0)//If the number of repeats is greater than zero 
     { 
     var cnt=Number(rngA[i][7]);//cnt is number of repeats 
     for(var n=0;n<cnt;n++) 
     { 
      var row=[]; 
      row.push(rngA[i][0]);//A 
      row.push(rngA[i][1]);//B 
      row.push(rngA[i][2]);//C 
      row.push(new Date(rngA[i][3].getTime() + (rngA[i][6] * (n + 1) * day)));//old date time plus repeat duration * repeat count * milliseconds in a day D 
      row.push(new Date(rngA[i][4].getTime() + (rngA[i][6] * (n + 1) * day)));//E 
      row.push(rngA[i][5]);//F 
      row.push(rngA[i][6]);//G 
      row.push('');//H 
      sht.appendRow(row);//add new event 
     } 
     sht.getRange(i+1,8).setValue(0);//zero out initial number of repeats because I use this to determine when repeats are required 
     } 
    } 
    sht.getRange(2,1,sht.getLastRow(),sht.getLastColumn()).sort({column:4,ascending:true});//Sort Spreadsheet by starting date 
} 
+0

這很好,非常感謝你,如果你有時間來解釋它的每個部分,請做,如果不是它不是一個問題,我只想學習以及.. – Ditch1983

+0

結帳評論。我評論了亮點。這不是很複雜。 – Cooper

+0

感謝幫助,一旦這個函數結束,有沒有辦法調用另一個函數,或者我只需要將它們設置爲觸發器? – Ditch1983

0

我已經改變了列F和G到G和H,我嘗試過編輯腳本這項工作,一切似乎離時,增加了在相隔幾天的工作重複它仍然增加了他們在F和不是G不能解決爲什麼?

function repeatingEvents() 
 
{ 
 
    var ss=SpreadsheetApp.getActiveSpreadsheet(); 
 
    var sht=ss.getSheetByName('Calendar'); 
 
    var rng=sht.getDataRange();//Get all of the data on the sheet 
 
    var rngA=rng.getValues(); 
 
    var day=86400000;//milliseconds in a day 
 
    var week=604800000;//millisecond in a week 
 
    for(var i=0;i<rngA.length;i++) 
 
    { 
 
     if(rngA[i][7]>0)//If the number of repeats is greater than zero 
 
     { 
 
     var cnt=Number(rngA[i][7]);//cnt is number of repeats 
 
     for(var n=0;n<cnt;n++) 
 
     { 
 
      var row=[]; 
 
      row.push(rngA[i][0]);//A 
 
      row.push(rngA[i][1]);//B 
 
      row.push(rngA[i][2]);//C 
 
      row.push(new Date(rngA[i][3].getTime() + (rngA[i][6] * (n + 1) * day)));//old date time plus repeat duration * repeat count * milliseconds in a day D 
 
      row.push(new Date(rngA[i][4].getTime() + (rngA[i][6] * (n + 1) * day)));//E 
 
      row.push(rngA[i][5]);//E This needs to be here other wise 6 and 7 become 5 & 6 
 
      row.push(rngA[i][6]);//F 
 
      row.push(rngA[i][7]);//G 
 
      sht.appendRow(row);//add new event 
 
     } 
 
     sht.getRange(i+1,8).setValue(0);//zero out initial number of repeats because I use this to determine when repeats are required 
 
     } 
 
    } 
 
    sht.getRange(2,1,sht.getLastRow(),sht.getLastColumn()).sort({column:4,ascending:true});//Sort Spreadsheet by starting date 
 
}

+0

我看到您的意見,我想你在E和F之間添加了一列。所以我修改了被附加到重複行的行。看看我對劇本的編輯。我還添加了列字母。我只是將新列F中的所有內容都複製到附加行的該列中。如果您向另一個位置添加了新列,請在電子表格中更改它,以便我可以爲您做出相應的更正。 – Cooper

+0

你在哪裏添加了添加列的地方,當我添加一個id爲添加到谷歌日曆時,但這是一個巨大的腳本來改變,我不明白很多,我只是試圖讓Calender腳本運行一次完成後,但可能會更容易將腳本設置爲每小時運行一次,除非您有任何建議,再次感謝您的幫助,我真的很感謝幫助。 – Ditch1983

+0

如果你看看我發佈的原始Google表格,我會看到我運行腳本時得到的輸出,甚至當我改變腳本以嘗試對齊時,我一定會錯過一些東西,因爲它仍然會把重複的日子放在列F. – Ditch1983