Comment ajouter un paramètre de pagination dans Google Script

Oct 07 2020

J'essaie d'utiliser Google Script pour analyser Google Sheets en tant que JSON. Mais le problème est que les données s'affichent en une seule fois

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

comment créer une URL de paramètre comme ?page=1et limit=10par page?

Voici mon code:

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);
  
}  

Réponses

1 Tanaike Oct 07 2020 at 12:42

Je crois que votre objectif est le suivant.

  • Vous souhaitez renvoyer les valeurs de la ligne 1 à la ligne 10 en effectuant une demande avec le paramètre de requête de ?page=1&limit=10à l'URL Web Apps à l'aide de Google Apps Script.
  • Dans votre script, vous souhaitez renvoyer les valeurs telles que {"user":[{"id":"###","year":"###","title":"###","img":"###"},,,]}.

Points de modification:

  • Dans votre script,
    • Le paramètre de requête n'est pas récupéré.
    • Le numéro de page et la limite ne sont pas déclarés.
    • var rows = sheet.getRange(5, 1, sheet.getLastRow()-1, sheet.getLastColumn()).getValues();est écrasé par var rows = sheet.getDataRange().getValues();.
    • Je pense que ce sont là la raison de votre problème But the problem is data shows all in one time.
  • Afin de récupérer le paramètre de requête, vous pouvez utiliser l'objet événement de eof doGet(e).

Lorsque les points ci-dessus sont reflétés dans votre script, cela devient comme suit.

Script modifié:

Veuillez copier et coller le script suivant dans l'éditeur de script. Et veuillez redéployer les applications Web en tant que nouvelle version. Ainsi, le dernier script est reflété dans les applications Web. Veuillez faire attention à cela.

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);
}
  • Dans cette modification, lorsque vous accédez à https://script.google.com/macros/s/###/exec?page=1&limit=10, les valeurs de la ligne 1 à la ligne 10 sont renvoyées. Lorsque vous accédez à https://script.google.com/macros/s/###/exec?page=3&limit=10, les valeurs de la ligne 21 à la ligne 30 sont renvoyées.
  • Lorsque vous accédez à https://script.google.com/macros/s/###/exec, les valeurs de la ligne 1 à la ligne 10 sont renvoyées.

Références:

  • Applications Web
  • Tirer parti des applications Web avec Google Apps Script