Google स्क्रिप्ट में URL पैरामीटर के साथ कॉलम Google शीट में डेटा कैसे फ़िल्टर करें?
मैं Google स्क्रिप्ट की कोशिश कर रहा हूं और मैं कीवर्ड मापदंडों के आधार पर डेटा प्रदर्शित करना चाहता हूं जो बाद में कॉलम सी को डेटा फ़िल्टर के रूप में संदर्भित करेगा जो पैरामीटर कीवर्ड में खोजे गए के अनुसार प्रदर्शित किया जाएगा।
उदाहरण के लिए मेरी पिछली परियोजना में मेरे पास पेजिनेशन के रूप में एक पैरामीटर था
?page=1&limit=10
अब मेरे पास एक नई समस्या है जिसे हल करने के लिए खोज और पृष्ठांकन दोनों हैं, मुझे खोज के संदर्भ के रूप में कॉलम b है
?page=1&limit=10&search=San Andreas
मैं नीचे दिए गए कोड को कैसे लागू कर सकता हूं?
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);
}
संपादित करें:
मेरा मतलब है कॉलम सी
हल के लिए संपादित करें:
मैं @Tanaike को धन्यवाद कहना चाहता हूं जिन्होंने मेरी इतनी मदद की!
यहाँ मेरा अंतिम कोड है
function doGet(e) {
var page = e.parameter.page || 1;
var limit = e.parameter.limit || 10;
var search = e.parameter.search || "";
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, search);
}
function getUsers(sheet, page, limit, search){
var lowCase = search.toString().toLowerCase();
var rows = sheet.getDataRange().getValues().filter(([,,c]) => c.toString().toLowerCase().includes(lowCase));
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);
}
जवाब
मेरा लक्ष्य इस प्रकार है।
- आप स्प्रेडशीट की शीट "list_film" से मान प्राप्त करना चाहते हैं
SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/10S8Igzt1tpqUBgJHVKpny-2s6G3Y3-vFsLMvlZVqpkc/edit#gid=810612111")। - आप
search"B" कॉलम से मान खोजकर मान प्राप्त करना चाहते हैं ।
संशोधन अंक:
- से
e.parameter.page,e.parameter.limitऔर?page=1&limit=10&search=San Andreasआपकी स्क्रिप्ट में, मैं समझ गया कि आप वेब ऐप्स का उपयोग कर रहे हैं। - इस मामले में, इसका इस्तेमाल करने के लिए आवश्यक है
San Andreasकी?page=1&limit=10&search=San Andreasतरहe.parameter.search। - मैं को संशोधित करने का प्रस्ताव करना चाहते हैं
sheet.getDataRange().getValues()मेंgetUsersजोड़करfilter। यह पसंद हैsheet.getDataRange().getValues().filter(([,b]) => b == search)
जब उपरोक्त बिंदु आपकी लिपि में परिलक्षित होते हैं, तो यह निम्नानुसार हो जाता है।
संशोधित स्क्रिप्ट:
var page = e.parameter.page || 1;
var limit = e.parameter.limit || 10;
var search = e.parameter.search || "";
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, search);
}
function getUsers(sheet, page, limit, search){
var rows = sheet.getDataRange().getValues().filter(([,b]) => b == search);
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&search=San Andreas,San Andreasतो शीट "लिस्ट_फिल्म" के कॉलम "बी" से खोजा जाता है और पंक्तियों, जिनके साथ समानSan Andreasहैं, वापस कर दिए जाते हैं।- यदि आप सहित मानों को पुनः प्राप्त करना चाहते हैं
search, तोb.toString().includes(search)इसके बजाय कृपया उपयोग करेंb == search।
- यदि आप सहित मानों को पुनः प्राप्त करना चाहते हैं
ध्यान दें:
जब आपने वेब ऐप्स की स्क्रिप्ट को संशोधित किया, तो कृपया वेब ऐप को नए संस्करण के रूप में फिर से तैयार करें। इसके द्वारा, नवीनतम स्क्रिप्ट वेब ऐप्स पर दिखाई देती है। कृपया इससे सावधान रहें।
हालांकि मैं कॉलम "बी" के मूल्यों के बारे में निश्चित नहीं हूं, यदि उपरोक्त स्क्रिप्ट आपके द्वारा अपेक्षित परिणाम नहीं था, तो कृपया इसे फिर से संशोधित
sheet.getDataRange().getValues().filter(([,b]) => b == search)करनेsheet.getDataRange().getDisplayValues().filter(([,b]) => b == search)और परीक्षण करने का प्रयास करें।यदि आप कॉलम "बी" के बजाय अन्य कॉलम के साथ तुलना करना चाहते हैं, उदाहरण के लिए, जब आप
searchकॉलम "सी" के साथ मूल्य की तुलना करना चाहते हैं , तो कृपया संशोधितfilter(([,b]) => b == search)करेंfilter(([,,c]) => c == search)।
संदर्भ:
- फिल्टर ()
- भी शामिल है ()
जोड़ा गया:
संशोधन अंक:
आपके my last codeनिम्नानुसार, यह पाया गया कि मेरी सुझाई गई स्क्रिप्ट का सही उपयोग नहीं किया गया था।
function doGet(e) { var page = e.parameter.page || 1; var limit = e.parameter.limit || 10; var search = e.parameter.search || ""; 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, search); } function getUsers(sheet, page, limit, search){ var rows = sheet.getDataRange().getDisplayValues().filter(([,b]) => b == search); var rows = sheet.getDataRange().getValues().slice(1); var rows = sheet.getDataRange().getValues().reverse(); 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); }पर
var rows = sheet.getDataRange().getValues().slice(1);औरvar rows = sheet.getDataRange().getValues().reverse();, मानों का उपयोग कर प्राप्त किए गए हैंsheet.getDataRange().getValues()। इसके द्वारा, मान फ़िल्टर नहीं किए जाते हैं। मुझे लगता है कि यह आपके वर्तमान मुद्दे का कारण है।
जब आपकी वर्तमान स्क्रिप्ट को संशोधित किया जाता है, तो यह निम्नानुसार हो जाता है।
संशोधित स्क्रिप्ट:
function doGet(e) {
var page = e.parameter.page || 1;
var limit = e.parameter.limit || 10;
var search = e.parameter.search || "";
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, search);
}
function getUsers(sheet, page, limit, search){
var rows = sheet.getDataRange().getDisplayValues().filter(([,,c]) => c == search);
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);
}
यदि आप पहली शीर्ष लेख पंक्ति को निकालना चाहते हैं और उल्टे मानों को वापस करना चाहते हैं, तो कृपया
getUsersनिम्नानुसार फ़ंक्शन को संशोधित करें ।function getUsers(sheet, page, limit, search){ var rows = sheet.getDataRange().getValues().slice(1).filter(([,,c]) => c == search).reverse(); 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); }