Как добавить параметр пагинации в Google Script

Oct 07 2020

Я пытаюсь использовать Google Script для анализа таблиц Google как JSON. Но проблема в том, что данные отображаются одновременно.

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

как создать URL-адрес параметра как ?page=1и для limit=10каждой страницы?

Это мой код:

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

Ответы

1 Tanaike Oct 07 2020 at 12:42

Я считаю вашей целью следующее.

  • Вы хотите вернуть значения из строки 1 в строку 10, запросив с параметром запроса ?page=1&limit=10URL-адрес веб-приложений с помощью скрипта Google Apps.
  • В вашем скрипте вы хотите вернуть такие значения, как {"user":[{"id":"###","year":"###","title":"###","img":"###"},,,]}.

Пункты модификации:

  • В вашем сценарии
    • Параметр запроса не извлекается.
    • Номер страницы и лимит не объявлены.
    • var rows = sheet.getRange(5, 1, sheet.getLastRow()-1, sheet.getLastColumn()).getValues();перезаписывается на var rows = sheet.getDataRange().getValues();.
    • Думаю, что в этом причина вашего выпуска But the problem is data shows all in one time.
  • Чтобы получить параметр запроса, вы можете использовать объект события eof doGet(e).

Когда вышеуказанные пункты отражаются в вашем скрипте, он становится следующим.

Измененный скрипт:

Скопируйте и вставьте следующий сценарий в редактор сценариев. И, пожалуйста, повторно разверните веб-приложения как новую версию. Таким образом, последний сценарий отражается в веб-приложениях. Пожалуйста, будьте осторожны.

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);
}
  • В этой модификации при доступе к https://script.google.com/macros/s/###/exec?page=1&limit=10, возвращаются значения от строки 1 до строки 10. При доступе к https://script.google.com/macros/s/###/exec?page=3&limit=10, возвращаются значения от строки 21 до строки 30.
  • При доступе к https://script.google.com/macros/s/###/exec, возвращаются значения от строки 1 до строки 10.

Рекомендации:

  • Веб-приложения
  • Использование преимуществ веб-приложений с помощью скрипта Google Apps