Cách thêm thông số phân trang trong Google Script

Oct 07 2020

Tôi đang cố gắng sử dụng Google Script để phân tích cú pháp Google Trang tính thành JSON. Nhưng vấn đề là dữ liệu hiển thị tất cả trong một lần

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

làm thế nào để tạo một URL tham số như ?page=1và limit=10trên mỗi trang?

Đây là mã của tôi:

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

Trả lời

1 Tanaike Oct 07 2020 at 12:42

Tôi tin rằng mục tiêu của bạn như sau.

  • Bạn muốn trả lại các giá trị từ hàng 1 đến hàng 10 bằng cách yêu cầu với tham số truy vấn của ?page=1&limit=10URL ứng dụng web bằng Google Apps Script.
  • Trong tập lệnh của bạn, bạn muốn trả về các giá trị như {"user":[{"id":"###","year":"###","title":"###","img":"###"},,,]}.

Điểm sửa đổi:

  • Trong tập lệnh của bạn,
    • Tham số truy vấn không được truy xuất.
    • Số trang và giới hạn không được khai báo.
    • var rows = sheet.getRange(5, 1, sheet.getLastRow()-1, sheet.getLastColumn()).getValues();bị ghi đè bởi var rows = sheet.getDataRange().getValues();.
    • Tôi nghĩ rằng đây là lý do của vấn đề của bạn But the problem is data shows all in one time.
  • Để truy xuất tham số truy vấn, bạn có thể sử dụng đối tượng sự kiện ecủa doGet(e).

Khi các điểm trên được phản ánh vào tập lệnh của bạn, nó sẽ trở thành như sau.

Tập lệnh đã sửa đổi:

Vui lòng sao chép và dán tập lệnh sau vào trình chỉnh sửa tập lệnh. Và vui lòng triển khai lại Ứng dụng web dưới dạng phiên bản mới. Bằng cách này, tập lệnh mới nhất được phản ánh tới Ứng dụng web. Hãy cẩn thận điều này.

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);
}
  • Trong sửa đổi này, khi bạn truy cập vào https://script.google.com/macros/s/###/exec?page=1&limit=10, các giá trị từ hàng 1 đến hàng 10 được trả về. Khi bạn truy cập vào https://script.google.com/macros/s/###/exec?page=3&limit=10, các giá trị từ hàng 21 đến hàng 30 được trả về.
  • Khi bạn truy cập vào https://script.google.com/macros/s/###/exec, các giá trị từ hàng 1 đến hàng 10 được trả về.

Người giới thiệu:

  • Ứng dụng web
  • Tận dụng các ứng dụng web với Google Apps Script