App script උදව්වක් දෙන්න

euler

Well-known member
  • Feb 2, 2019
    2,271
    528
    113
    මට උදව් කරන්න Google sheet එකක තොරතුරු ටිකක් web app එකක පෙන්වද්දී යූසර් නේම් එක අනූව filter වෙලා userට පේන විදියට හදාගන්න.

    තොරතුරු වල ඊමේල් කොලම් එකක් තිබෙනවා. යූසර් ලොගින් උනාම ලොග් උනු ඊමේල් එකට ඩේටා ටික ෆිල්ටර් වෙලා පෙන්වන ක්‍රමයක්...:)


    Code:
     <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span>
        </button>

    මේ පහල තිබෙන ටේබල් එකට එන ඩේටා ලොගින් යූසර් නේම් අනූව ෆිල්ටර් වෙන්න ඕනේ.
    Code:
      function createTable(dataArray) {
          $('#btn-close').click()
          $(document).ready(function(){
    
          $('#dataTable').DataTable({
        //data: dataArray,
          data: dataArray.slice(1),

    කරුණාකර උදව් කරන්න
     

    euler

    Well-known member
  • Feb 2, 2019
    2,271
    528
    113
    1663308556485.png


    Can you please suggest me to way I could filter as per picture?
    When I logged in, I want to see only "euler" data.
     
    Last edited:

    euler

    Well-known member
  • Feb 2, 2019
    2,271
    528
    113

    මම ගොඩක් ට්‍රයි කලා ඒක කරන්න.ඒක කරගන්න බැරි උනා :(



    පස්සේ පහල විදියට stack overflow එකක් බලාගෙන මේ දේ ඉගෙන ගන්න හිතුනේ.

    1. මේකෙන් ඩේටා ටික ගූගල් ශීට් එකකින් ගන්නවා.

    Code:
         function createTable(dataArray) {
              DataTable({
            //data: dataArray,
              data: dataArray.slice(1),
             columns: [
              { title: "ID" },
              { title: "NAME" },
              { title: "INSTITUTION" },
              { title: "LogNumber" },
              { title: "value" },
              { title: "PERSON" },
         { title: "Edit", "render": function (data,type){
                      return "<button type='button' class='btn btn-outline-warning btn-xs editBtn' data-toggle='modal' data-target='#myModal' onclick='editData(this);'><i class='fa fa-edit'></i></button>";
                    }
                },
    
         { title: "Delete", "render": function (data,type){
                      return "<button type='button' class='btn btn-outline-danger btn-xs deleteBtn' onclick='deleteData(this);'><i class='fa fa-trash''></i></button>";
                    }
                },
             ]
          }

    2. පහල කෝඩ් එකෙන් ෆිල්ටර් කරන්න පුලුවන් කියලා තිබුනට මොකක් හරි වැරැද්දක් තිබෙනවා. මොකක්ද තේරෙන්නේ නෑ

    Code:
    <input type="text"  id="personfilter" onkeyup="filterRows()">';

    Code:
     function filterRows(a) {
             var table = document.getElementById("createTable(dataArray)");
             var tr = table.getElementsByTagName("title");
             var length = tr.length;
             // specify the column on which you want to perform the filtering:
             var columnNumber = 5;
             var searchField = document.getElementById("personfilter");
             var filter = searchField.value;
             // Loop through all table rows, and hide those who don't match the search query
             for (var i = 0; i < tr.length; i++) {
                 var td = tr.getElementsByTagName("DataTable")[5];
                 var  input = td.innerHTML;
                 if (input && input.indexOf(filter) > -1) {
                     tr[i].style.display = "";
                 } else {
                     tr[i].style.display = "none";
                 }
             }
         }

    Any idea where I lost?

    ස්තූතියි අදහසට. මම උත්සාහ කරන්නම්. USER ta වෙනස් කරන්න බැරිවෙන්නයි filter වෙන්න ඕනේ. (ලොගින් username එකට අනූව data filter කරගන්න බැරි නිසා මම බැලුවේ search bar එකේ default search key එකක් search වෙලා load වෙන්නත් ඒක user ට වෙනස් කරන්න බැරි වෙන්නත්).

    මම uda දාලා තියෙන data array එකෙන්ම filter karaගන්න ක්‍රමයක් තියෙනවද?
    ------ Post added on Sep 16, 2022 at 9:40 PM
     

    wpmanoj

    Well-known member
  • Nov 18, 2010
    2,671
    6,440
    113
    ස්තූතියි අදහසට. මම උත්සාහ කරන්නම්. USER ta වෙනස් කරන්න බැරිවෙන්නයි filter වෙන්න ඕනේ. (ලොගින් username එකට අනූව data filter කරගන්න බැරි නිසා මම බැලුවේ search bar එකේ default search key එකක් search වෙලා load වෙන්නත් ඒක user ට වෙනස් කරන්න බැරි වෙන්නත්).

    මම uda දාලා තියෙන data array එකෙන්ම filter karaගන්න ක්‍රමයක් තියෙනවද?

    ------ Post added on Sep 16, 2022 at 9:40 PM
    මම කරා නම් කරන්නෙ යූසර්ට අදාල නොවන ඩේටා නොයව ඉන්නවා මුලින්ම. hidden column ඒකක් හදලා ඒ්කට ෆිල්ටර් ඒක දාලා. search box ඒක css වලින් හයිඩ් කරනවා. row order ඒක ඩිසෝබල් කරනවා)
     
    • Like
    Reactions: RottenCOLT

    euler

    Well-known member
  • Feb 2, 2019
    2,271
    528
    113
    මම කරා නම් කරන්නෙ යූසර්ට අදාල නොවන ඩේටා නොයව ඉන්නවා මුලින්ම. hidden column ඒකක් හදලා ඒ්කට ෆිල්ටර් ඒක දාලා. search box ඒක css වලින් හයිඩ් කරනවා. row order ඒක ඩිසෝබල් කරනවා)
    මම උත්සාහ කරන්නම් ඒ ලිවූ දේවල් ඉගෙන ගෙන කරන්න. ගොඩක් ස්තූතියි

    dataArray.filter(x => x.name === loggedInUserName);

    Mehema kare nedda komla.
    Can you share a code pls..
    ------ Post added on Sep 17, 2022 at 1:28 AM
     

    euler

    Well-known member
  • Feb 2, 2019
    2,271
    528
    113
    uba meka hadagattada... ube files tika mata dapanko. html, css, js,
    pm kala

    මම කරා නම් කරන්නෙ යූසර්ට අදාල නොවන ඩේටා නොයව ඉන්නවා මුලින්ම. hidden column ඒකක් හදලා ඒ්කට ෆිල්ටර් ඒක දාලා. search box ඒක css වලින් හයිඩ් කරනවා. row order ඒක ඩිසෝබල් කරනවා)
    මම අද අලුත් දෙයක් ඉගෙන ගත්තා. thanks.
    oSearch
    https://legacy.datatables.net/ref#oSearch
    ------ Post added on Sep 17, 2022 at 8:48 PM


    ------ Post added on Sep 17, 2022 at 9:46 PM

    මට උදව් කරන්න Google sheet එකක තොරතුරු ටිකක් web app එකක පෙන්වද්දී යූසර් නේම් එක අනූව filter වෙලා userට පේන විදියට හදාගන්න.

    තොරතුරු වල ඊමේල් කොලම් එකක් තිබෙනවා. යූසර් ලොගින් උනාම ලොග් උනු ඊමේල් එකට ඩේටා ටික ෆිල්ටර් වෙලා පෙන්වන ක්‍රමයක්...:)


    Code:
     <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span>
        </button>

    මේ පහල තිබෙන ටේබල් එකට එන ඩේටා ලොගින් යූසර් නේම් අනූව ෆිල්ටර් වෙන්න ඕනේ.
    Code:
      function createTable(dataArray) {
          $('#btn-close').click()
          $(document).ready(function(){
    
          $('#dataTable').DataTable({
        //data: dataArray,
          data: dataArray.slice(1),

    කරුණාකර උදව් කරන්න
    මට දැනට තිබෙන ගැටලුව ලියන්න හිතුනා. PM කරලා අහන අයටත් උදව් කරන්න ලේසි වෙන්න ලියන්නම්.

    මම දැනට USER LOGIN එක හදලා තියෙනවා google sheet ekakaka ඇප්ස්ක්‍රිප්ට් වලින්.
    මම ඒකෙන් සාර්ථකව ලොගින් උනාම ලින්ක් එකක් ඕපන් වෙන්න දුන්නා. ඒ ලින්ක් එකෙන් යන්නේ මම google sheet 2 eke ඇප් ස්ක්‍රිප්ට් වලින් හදපු වෙබ් ඇප් එකකට. ඒ වෙබ් ඇප් එකට ගියාම මගේ USERNAME එක(ඊමේල් ඇඩ්‍රස්) අනූව මගේ දෙවෙනි ශීට් එකේ තිබෙන ඩේටා ෆිල්ටර් වෙල webapp eke පෙන්වන්නයි ඕනේ. (ෆිල්ටර් වෙන්නේ ඩේටා කොලම් එකක තිබෙන ඊමේල් ඇඩ්‍රස් එකට.) මේ filter වෙලා එන තොරතුරු තව දුරටත් search කරන්නත් පුලුවන් වෙන්න ඕනේ .


    මට තාම ඉගෙන ගන්න බැරි උනා යට තිබෙන ෆන්ක්ශන් එක මැදට ඊමේල් ඇඩ්‍රස් එක ෆිල්ටර් වෙන්න දාන හැටි
    $(document).ready(function(){


    මට හැඟෙන අඩුපාඩු.

    1. මම USER LOGIN වෙන්නේ පළ වෙනි ගූගල් ශීට් එකේ ඇප්ස්ක්‍රිප්ට් එකෙන් හදපු වෙබ් ඇප් එකෙන්නේ. හැබැයි මගේ තොරතුරු තියෙන්නේ දෙවෙනි ගූගල් ශීට් එකේ.
    ඉතින් මගේ යූසර් නේම් එකට අනූව දෙවෙනි ශීට් එක filter කරන්න යන එක ප්‍රශ්නයක් වගෙ.

    2.ලොගින් එකෙන් (username-email) මට filter කරන්න ඊමේල් එක ගන්න බැරි නම් මට පුලුවන් නේද මෙහෙම දෙයක්.

    ලොගින් උනාම මම වෙබ් ඇප් එකක් ඔපන් වෙන්න දෙනවා. ඒකෙන් ඉල්ලනවා USER ta number tikak ටයිප් කරන්න. යූසර් ඒ කෝඩ් එක ටයිප් කරලා සෙන්ඩ් කරන එක අනූව ගූගල් ශීට් එකේ අදාල ඊමේල් ඇඩ්‍රස් එක තෝරගන්නව. දැන් අර osearch එකට දෙනවා ඒ ඊමේල් එක. filter වෙනවා... කන්සෙප්ට් එකක් විතරයි. කරන්න තේරෙන්නේ නෑ
    ------ Post added on Sep 17, 2022 at 9:48 PM

    @Software_Eng කෝඩ් ටික බැලුවද :)
    ------ Post added on Sep 19, 2022 at 5:02 PM
     
    Last edited:

    Software_Eng

    Well-known member
  • Dec 15, 2017
    1,194
    1,246
    113
    pm kala


    මම අද අලුත් දෙයක් ඉගෙන ගත්තා. thanks.
    oSearch
    https://legacy.datatables.net/ref#oSearch
    ------ Post added on Sep 17, 2022 at 8:48 PM


    ------ Post added on Sep 17, 2022 at 9:46 PM


    මට දැනට තිබෙන ගැටලුව ලියන්න හිතුනා. PM කරලා අහන අයටත් උදව් කරන්න ලේසි වෙන්න ලියන්නම්.

    මම දැනට USER LOGIN එක හදලා තියෙනවා google sheet ekakaka ඇප්ස්ක්‍රිප්ට් වලින්.
    මම ඒකෙන් සාර්ථකව ලොගින් උනාම ලින්ක් එකක් ඕපන් වෙන්න දුන්නා. ඒ ලින්ක් එකෙන් යන්නේ මම google sheet 2 eke ඇප් ස්ක්‍රිප්ට් වලින් හදපු වෙබ් ඇප් එකකට. ඒ වෙබ් ඇප් එකට ගියාම මගේ USERNAME එක(ඊමේල් ඇඩ්‍රස්) අනූව මගේ දෙවෙනි ශීට් එකේ තිබෙන ඩේටා ෆිල්ටර් වෙල webapp eke පෙන්වන්නයි ඕනේ. (ෆිල්ටර් වෙන්නේ ඩේටා කොලම් එකක තිබෙන ඊමේල් ඇඩ්‍රස් එකට.) මේ filter වෙලා එන තොරතුරු තව දුරටත් search කරන්නත් පුලුවන් වෙන්න ඕනේ .


    මට තාම ඉගෙන ගන්න බැරි උනා යට තිබෙන ෆන්ක්ශන් එක මැදට ඊමේල් ඇඩ්‍රස් එක ෆිල්ටර් වෙන්න දාන හැටි



    මට හැඟෙන අඩුපාඩු.

    1. මම USER LOGIN වෙන්නේ පළ වෙනි ගූගල් ශීට් එකේ ඇප්ස්ක්‍රිප්ට් එකෙන් හදපු වෙබ් ඇප් එකෙන්නේ. හැබැයි මගේ තොරතුරු තියෙන්නේ දෙවෙනි ගූගල් ශීට් එකේ.
    ඉතින් මගේ යූසර් නේම් එකට අනූව දෙවෙනි ශීට් එක filter කරන්න යන එක ප්‍රශ්නයක් වගෙ.

    2.ලොගින් එකෙන් (username-email) මට filter කරන්න ඊමේල් එක ගන්න බැරි නම් මට පුලුවන් නේද මෙහෙම දෙයක්.

    ලොගින් උනාම මම වෙබ් ඇප් එකක් ඔපන් වෙන්න දෙනවා. ඒකෙන් ඉල්ලනවා USER ta number tikak ටයිප් කරන්න. යූසර් ඒ කෝඩ් එක ටයිප් කරලා සෙන්ඩ් කරන එක අනූව ගූගල් ශීට් එකේ අදාල ඊමේල් ඇඩ්‍රස් එක තෝරගන්නව. දැන් අර osearch එකට දෙනවා ඒ ඊමේල් එක. filter වෙනවා... කන්සෙප්ට් එකක් විතරයි. කරන්න තේරෙන්නේ නෑ
    ------ Post added on Sep 17, 2022 at 9:48 PM

    @Software_Eng කෝඩ් ටික බැලුවද :)
    ------ Post added on Sep 19, 2022 at 5:02 PM
    ubata berida machan run wena stackblits ekak hari code pen ekak hari danna. ubata denaganna one part eka witharak his thiyela anith tika hadala dapan run karaganna puluwan widiyata. data arrays ehema hardcode karala dapan.uba ewapu code eka run wenne nathi nisa hoyanna amarui.
     

    euler

    Well-known member
  • Feb 2, 2019
    2,271
    528
    113
    මම කරා නම් කරන්නෙ යූසර්ට අදාල නොවන ඩේටා නොයව ඉන්නවා මුලින්ම. hidden column ඒකක් හදලා ඒ්කට ෆිල්ටර් ඒක දාලා. search box ඒක css වලින් හයිඩ් කරනවා. row order ඒක ඩිසෝබල් කරනවා)
    "මම කරා නම් කරන්නෙ යූසර්ට අදාල නොවන ඩේටා නොයව ඉන්නවා මුලින්ම" -------මට ඒ දේ කරගන්න ට්‍රයි කලා
    කලින් ඩේටා යූසර් ට ඔක්කොම යවලා ෆිල්ටර් කරන්නනේ කල්පනා කලේ.මූ මුලම තියෙන්නේ කලින් කෝඩ් එක

    Code:
    function getAllData() {
     var ss = SpreadsheetApp.getActiveSpreadsheet()
     var sheet = ss.getSheets()[0]
     var range = sheet.getDataRange()
     var values = range.getDisplayValues()
     Logger.log(values)
     return values
    }

    ඒ වෙනුවට පහළ කෝඩ් එක භාවිතා කලා ඩේටා ටික ෆිල්ටර් කරගන්න යූසර් අනූව. ප්‍රශ්නේ තියෙන්නේ පහළ කෝඩ් එකේ හෙඩර් එක නෑ. ඒ නිසාද දන්නේ නෑ මගේ datable.html එකේ පෙන්වන්නේ නෑ


    Code:
    function getAllData() {
    
      var values = getByName('userID')
      Logger.log(values)
      return values
    
     }
    
    function getByName(user, colName = 'email') {
      const sheet = SpreadsheetApp.getActiveSheet();
      const data = sheet.getDataRange().getValues();
      const hA = data.shift();
      const idx = hA.reduce((a, h, i) => (a[h] = i, a), {});
      let o = data.map(r => {
        if (r[idx[colName]] == user) {
          return r;
        }
      }).filter(r => r );
      if (o && o.length > 0) {
        return o;
      }
    }
     
    Last edited: