Cómo agregar un parámetro de paginación en Google Script

Oct 07 2020

Estoy tratando de usar Google Script para analizar Google Sheets como JSON. Pero el problema es que los datos se muestran todos al mismo tiempo.

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

¿Cómo crear una URL de parámetro como ?page=1y limit=10por página?

Este es mi código:

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

Respuestas

1 Tanaike Oct 07 2020 at 12:42

Creo que su objetivo es el siguiente.

  • Desea devolver los valores de la fila 1 a la fila 10 solicitando con el parámetro de consulta de ?page=1&limit=10a la URL de Web Apps mediante Google Apps Script.
  • En su secuencia de comandos, desea devolver los valores como {"user":[{"id":"###","year":"###","title":"###","img":"###"},,,]}.

Puntos de modificación:

  • En tu guión,
    • El parámetro de consulta no se recupera.
    • El número de página y el límite no se declaran.
    • var rows = sheet.getRange(5, 1, sheet.getLastRow()-1, sheet.getLastColumn()).getValues();se sobrescribe con var rows = sheet.getDataRange().getValues();.
    • Creo que esta es la razón de su problema But the problem is data shows all in one time.
  • Para recuperar el parámetro de consulta, puede utilizar el objeto de evento de eof doGet(e).

Cuando los puntos anteriores se reflejan en su secuencia de comandos, se convierte en lo siguiente.

Guión modificado:

Copie y pegue la siguiente secuencia de comandos en el editor de secuencias de comandos. Y vuelva a implementar las aplicaciones web como una nueva versión. De esta manera, la última secuencia de comandos se refleja en las aplicaciones web. Tenga cuidado con esto.

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);
}
  • En esta modificación, al acceder a https://script.google.com/macros/s/###/exec?page=1&limit=10, se devuelven los valores de la fila 1 a la fila 10. Cuando accede a https://script.google.com/macros/s/###/exec?page=3&limit=10, se devuelven los valores de la fila 21 a la fila 30.
  • Cuando accede a https://script.google.com/macros/s/###/exec, se devuelven los valores de la fila 1 a la fila 10.

Referencias:

  • Aplicaciones web
  • Aprovechamiento de las aplicaciones web con Google Apps Script