這是一些代碼,它應該做的伎倆。
function generateReccuringExpenses(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var inputSheet = ss.getSheetByName("Input Table");
var outputSheet = ss.getSheetByName("Output Table");
var endYear = 2020;
// We considere your data to be on a sheet with a header, starting on A1 cell
var data = inputSheet.getRange(2, 1, inputSheet.getLastRow()-1, inputSheet.getLastColumn()).getValues();
for(var i = 0; i < data.length; i++){
var row = data[i];
if(row[3] > 0){
var elements = new Array();
var d = new Date(row[0]);
while(d.getFullYear() < endYear){
var test = d.getFullYear();
var month = d.getMonth() +1;
var dateString = month+"/"+d.getDate()+"/"+d.getFullYear();
var newRow = [dateString, row[1],row[2]];
elements.push(newRow);
var n = d.getMonth() + row[3];
if(n > 11){
d.setMonth(n -11);
d.setYear(d.getYear() + 1);
}
else{
d.setMonth(n);
}
}
var outputRange = outputSheet.getRange(outputSheet.getLastRow()+1, 1, elements.length, outputSheet.getLastColumn());
outputRange.setValues(elements);
}
}
var range = outputSheet.getRange(2, 1, outputSheet.getLastRow()+1, outputSheet.getLastColumn());
range.sort(1); // Sort by date (column 1)
}
您可以使用Range.sort()方法或使用Spreadsheet工具對結果進行排序。
非常感謝皮埃爾 - 它的工作!很快 - 是否有可能改變輸入表和輸出表的位置,如B20,E20等?如果是的話 - 哪些功能。 (begin api!) –
在上面的代碼中,我使用[Sheet.getRange(startRow,startCol,numRows,numCols)](https://developers.google.com/apps-script/reference/spreadsheet/sheet#getRange(Integer,Integer,Integer,Integer))方法,但可以使用[Sheet.getRange(A1notation)](https://developers.google.com/apps-script/reference/spreadsheet/sheet# getRange(String))方法 –
再次感謝,將探討。另外,我想實際設置它,只要在輸入表中添加一個新行,此函數就會刪除所有現有數據,並用多行的所有新數據替換它。或者,我應該使用任何方法/方向拿這個 - 會非常有幫助! –