Di bawah ini adalah skrip yang saat ini saya jalankan untuk mengunduh data acara dari Google Kalender. Cara penulisannya saat ini, itu: 1) Menghapus lembar setiap kali dijalankan sebelum diisi dengan data baru; 2) Berjalan sekali, atas perintah, menarik ID Kalender dari nilai sel tunggal (D2)

Saya memiliki sekitar 8 ID Cal yang berbeda yang disimpan ke dalam lembar terpisah yang disebut 'CalIDs', yang akan saya salin/tempel ke sel D2 setiap kali saya menjalankan skrip. Proses lengkapnya adalah: Tempel ID Cal pertama, jalankan skrip, salin data ke lembar lain, tempel ID Cal kedua, jalankan skrip, salin data ke lembar lain ... ulangi proses ini hingga semua 8 ID Cal datanya ditarik dan disalin ke lembar lainnya.

Yang ingin saya lakukan adalah memodifikasi skrip ini agar berjalan seperti ini: Sel referensi A1 dari lembar 'CalIDs' untuk menarik data kalender pertama, membuang ke lembar. Kemudian periksa nilai dalam A2 CalIDs - jika tidak kosong, jalankan skrip lagi dengan menarik data kalender ke-2 itu ke dalam lembar, MENAMBAHKAN ke data yang ada (tidak menimpa data pertama, jadi saya membayangkan jenis perintah "temukan baris kosong pertama" adalah diperlukan). Lanjutkan proses ini hingga sel kosong pertama dari Col A pada CalIDs ditemukan, lalu akhiri.

Adakah bantuan tentang cara melakukan ini? Saya telah mencari di sekitar dan belum menemukan jawaban sendiri.

  function CalendarDownload(){  

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(sheet.getSheetByName('PULL'))

  var mycal = SpreadsheetApp.getActiveSheet().getRange("c2").getValue(); // PULL CALENDAR ID FROM CELL   
  var cal = CalendarApp.getCalendarById(mycal);
  var startdate = SpreadsheetApp.getActiveSheet().getRange("a2").getValue()  // SET THE DATE OF SEARCH RANGE
  var enddate = SpreadsheetApp.getActiveSheet().getRange("b2").getValue()   // SET THE DATE OF SEARCH RANGE
  var editor = SpreadsheetApp.getActiveSheet().getRange("d2").getValue()   // COLLECT CALENDER ID FROM CELL
  var events = cal.getEvents(startdate, enddate); // SET THE DATE OF SEARCH RANGE

var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(4, 1, sheet.getLastRow(), 9).clear({contentsOnly:true});

// Create a header record on the current spreadsheet in cells A1:N1 - Match the number of entries in the "header=" to the last parameter of the getRange entry below
var header = [["Event Start", "Event End", "Description", "EDITOR", "DURATION", "PROD #", "PHASE", "NOTES"]]
var range = sheet.getRange(3,1,1,8);
range.setValues(header);

// Loop through all calendar events found and write them out starting on calulated ROW 3 (i+3)
for (var i=0;i<events.length;i++) {
var row=i+4;
var myformula_placeholder = '';
var details=[[events[i].getStartTime(), events[i].getEndTime(), events[i].getTitle(), editor]];
var range=sheet.getRange(row,1,1,4);
range.setValues(details);

 var cell=sheet.getRange(row,5);
cell.setFormula('=(HOUR(B' +row+ ')+(MINUTE(B' +row+ ')/60))-(HOUR(A' +row+ ')+(MINUTE(A' +row+ ')/60))');
cell.setNumberFormat('.00');



}
}
0
Nick 13 Maret 2019, 20:37

1 menjawab

Jawaban Terbaik

Saya akan memodifikasi kode Anda seperti ini:

//******************************************************************************

function allCalendars(){
      var sheet = SpreadsheetApp.getActiveSpreadsheet();
      var ss = sheet.getSheetByName('PULL');
      var os = sheet.getSheetByName('CalIds');
      var start = 2;
      ss.getRange(4, 1, ss.getLastRow(), 9).clear({contentsOnly:true});
      var data = os.getDataRange().getValues();
      for (var i=0; i<data.length;i++)
        {
            start = CalendarDownload(start,data[i][0]);
        }//for loop

}//*****************************************************************************

Dan kemudian saya memodifikasi sedikit KalenderDownload:

function CalendarDownload(start,mycal){  

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(sheet.getSheetByName('PULL'))

  var cal = CalendarApp.getCalendarById(mycal);
  var startdate = SpreadsheetApp.getActiveSheet().getRange("a2").getValue()  // SET THE DATE OF SEARCH RANGE
  var enddate = SpreadsheetApp.getActiveSheet().getRange("b2").getValue()   // SET THE DATE OF SEARCH RANGE
  var editor = SpreadsheetApp.getActiveSheet().getRange("d2").getValue()   // COLLECT CALENDER ID FROM CELL
  var events = cal.getEvents(startdate, enddate); // SET THE DATE OF SEARCH RANGE



// Create a header record on the current spreadsheet in cells A1:N1 - Match the number of entries in the "header=" to the last parameter of the getRange entry below
var header = [["Event Start", "Event End", "Description", "EDITOR", "DURATION", "PROD #", "PHASE", "NOTES"]]
var range = sheet.getRange(3,1,1,8);
range.setValues(header);

// Loop through all calendar events found and write them out starting on calulated ROW 3 (i+3)
for (var i=0;i<events.length;i++) {
var row=i+4;
var myformula_placeholder = '';
var details=[[events[i].getStartTime(), events[i].getEndTime(), events[i].getTitle(), editor]];
var range=sheet.getRange((start+row),1,1,4);
range.setValues(details);

 var cell=sheet.getRange(row,5);
cell.setFormula('=(HOUR(B' +row+ ')+(MINUTE(B' +row+ ')/60))-(HOUR(A' +row+ ')+(MINUTE(A' +row+ ')/60))');
cell.setNumberFormat('.00');

return sheet.getLastRow();


}
}

Fungsi pertama mengulang setiap kalender pada daftar, yang kedua menulis semua acara dan kemudian melewati kembali baris awal untuk kalender berikutnya.

0
J. G. 13 Maret 2019, 21:55