Bagaimana menambahkan parameter pagination di Google Script

Oct 07 2020

Saya mencoba menggunakan Google Script untuk mengurai Google Sheets sebagai JSON. Tetapi masalahnya adalah data menunjukkan semua dalam satu waktu

https://script.googleusercontent.com/macros/echo?user_content_key=wuq_9LI3vgIatlNAP4hjntylItBcH61LXYXvFpbC5h_um48YgvDXJOZdI2Sbwn2-leov9vWqBZxfs0iksGahfK1YyUi4kexzm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnPRXzlSQpAo7NiD1uFvfd55kniGZfmcNCMpPtY_76TwXPVOG9f0Yl_uIsvXmrtpvNgmu1XJIo47X&lib=MpD4s_Dhs12GOOkdpgVYeR4F8VEIE0aCI

bagaimana cara membuat parameter URL like ?page=1dan limit=10per halaman?

Ini kode saya:

function doGet(e){

 // url
 var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/10S8Igzt1tpqUBgJHVKpny-2s6G3Y3-vFsLMvlZVqpkc/edit#gid=810612111");

 var sheet = ss.getSheetByName("list_film");
 return getUsers(sheet); 
}
function getUsers(sheet){
  var jo = {};
  var dataArray = [];
  var rows = sheet.getRange(5, 1, sheet.getLastRow()-1, sheet.getLastColumn()).getValues();
  var rows = sheet.getDataRange().getValues();
  
  for(var i = 0, l= rows.length; i<l ; i++){
    var dataRow = rows[i];
    var record = {};
    record['id'] = dataRow[0];
    record['year'] = dataRow[1];
    record['title'] = dataRow[2];
    record['img'] = dataRow[3];
    
    dataArray.push(record);
    
  }  
  
  jo.user = dataArray;
  var result = JSON.stringify(jo);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
  
}  

Jawaban

1 Tanaike Oct 07 2020 at 12:42

Saya yakin tujuan Anda sebagai berikut.

  • Anda ingin mengembalikan nilai dari baris 1 ke baris 10 dengan meminta dengan parameter kueri ?page=1&limit=10ke URL Aplikasi Web menggunakan Skrip Google Apps.
  • Di skrip Anda, Anda ingin mengembalikan nilai seperti {"user":[{"id":"###","year":"###","title":"###","img":"###"},,,]}.

Poin modifikasi:

  • Dalam naskah Anda,
    • Parameter kueri tidak diambil.
    • Nomor halaman dan batas tidak diumumkan.
    • var rows = sheet.getRange(5, 1, sheet.getLastRow()-1, sheet.getLastColumn()).getValues();ditimpa oleh var rows = sheet.getDataRange().getValues();.
    • Saya pikir ini adalah alasan masalah Anda But the problem is data shows all in one time.
  • Untuk mengambil parameter kueri, Anda dapat menggunakan objek acara edari doGet(e).

Ketika poin di atas direfleksikan ke naskah Anda, itu menjadi sebagai berikut.

Skrip yang dimodifikasi:

Harap salin dan tempel skrip berikut ke editor skrip. Dan harap terapkan ulang Aplikasi Web sebagai versi baru. Dengan ini, skrip terbaru direfleksikan ke Aplikasi Web. Harap berhati-hati ini.

function doGet(e) {
  var page = e.parameter.page || 1;
  var limit = e.parameter.limit || 10;
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/10S8Igzt1tpqUBgJHVKpny-2s6G3Y3-vFsLMvlZVqpkc/edit#gid=810612111");
  var sheet = ss.getSheetByName("list_film");
  return getUsers(sheet, page, limit); 
}

function getUsers(sheet, page, limit){
  var rows = sheet.getDataRange().getValues();
  var dataArray = rows.splice(limit * (page - 1), limit).reduce((ar, [a, b, c, d]) => ar.concat({id: a, year: b, title: c, img: d}), []);
  var jo = {};
  jo.user = dataArray;
  var result = JSON.stringify(jo);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
  • Dalam modifikasi ini, saat Anda mengakses https://script.google.com/macros/s/###/exec?page=1&limit=10, nilai dari baris 1 ke baris 10 dikembalikan. Saat Anda mengakses https://script.google.com/macros/s/###/exec?page=3&limit=10, nilai dari baris 21 hingga baris 30 dikembalikan.
  • Saat Anda mengakses https://script.google.com/macros/s/###/exec, nilai dari baris 1 hingga baris 10 dikembalikan.

Referensi:

  • Aplikasi Web
  • Memanfaatkan Aplikasi Web dengan Google Apps Script