彰化一整天的論壇

 找回密碼
 立即註冊
查看: 3695|回復: 32

如何設計訂單查詢系統_部分顯示【Google表單教學】

[複製鏈接]
發表於 2020-9-30 09:03:05 | 顯示全部樓層 |閱讀模式
http://discuz.bestdaylong.com/thread-38953-1-1.html
原文章有網友提到查詢的身分證不要顥示,因為寫法會不同,所以另開主題討論。

Google APP Script
  1. function doGet(e) {
  2.   //https://youtu.be/MQV3AlAOtCU 影音說明
  3.   var params = e.parameter;
  4.   var uid = params.uid;


  5.   var Sheet = SpreadsheetApp.getActiveSheet();

  6.   var LastRow = Sheet.getLastRow();
  7.   var LastColumn = Sheet.getLastColumn();
  8.   var data = [];

  9.   // 取得部分顯示資料
  10.   
  11.   var listAll = Sheet.getSheetValues(1, 2, LastRow, LastColumn-1);
  12.   
  13.   // 設定查詢欄位資料
  14.   var inq=Sheet.getSheetValues(1, 1, LastRow, 1);
  15.   
  16.   //存標題
  17.   data.push({data: listAll[0]});

  18.   
  19.   // 找尋資料是否有存在
  20.   for(var i = 1;i < listAll.length; i++){
  21.     if(inq[i].indexOf(uid)===0){
  22.       data.push({data: listAll[i]})
  23.     }
  24.   }
  25.   
  26.   //顯示資料
  27.   Logger.log(data);
  28.   
  29.   // 回傳json資料
  30.   return ContentService.createTextOutput(JSON.stringify(data))
  31.     .setMimeType(ContentService.MimeType.JSON);
  32. }
複製代碼


HTML網頁程式碼
  1. <html>
  2. <head>
  3. <meta charset="UTF-8" />
  4. <script type="text/javascript">
  5. function showHint(str)
  6. {
  7. var xmlhttp;

  8.         if (window.XMLHttpRequest)
  9.           {// code for IE7+, Firefox, Chrome, Opera, Safari
  10.           xmlhttp=new XMLHttpRequest();
  11.           }
  12.         else
  13.           {// code for IE6, IE5
  14.           xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  15.           }
  16.         xmlhttp.onreadystatechange=function()
  17.           {
  18.                   if (xmlhttp.readyState==4 && xmlhttp.status==200)      
  19.                   {
  20.                         var result=xmlhttp.responseText;
  21.                         var obj = JSON.parse(result);//解析json字串為json物件形式
  22.                                                 
  23.                         var html = '<table border=1 width=100%>';//
  24.                         
  25.                         for (var i = 0; i < obj.length; i ++ ) {//
  26.                                 html  += '<tr>';//
  27.                                 for(j=0;j<obj[i].data.length;j++)
  28.                                 {
  29.                                   html+= '<td>'+obj[i].data[j]+'</td>';
  30.                                 }
  31.                                 html  += '</tr>';            
  32.                         }
  33.                         html+="</table>";
  34.                         
  35.                         document.getElementById("order_status").innerHTML=html;
  36.                         if(obj.length==1) //只有一筆代表查不到資料
  37.                                 alert('查無資料');
  38.                   }

  39.           }
  40.     var url="https://script.google.com/macros/s/AKfycbwLolAyf6vBS1TkjOGKHwjUZ8N5a4zQi2NgyuwN/exec";
  41.         xmlhttp.open("get",url+"?uid="+str,true);
  42.         xmlhttp.send();
  43. }
  44. </script>
  45. </head>
  46. <body>

  47. 輸入購買者身分證號:<input type="text" id="uid" />
  48. <input type="button" name="inq" value="查詢" onclick="showHint(uid.value);"></br>

  49. <span id="order_status"></span>
  50. </body>
  51. </html>
複製代碼



測試網址: https://bestdaylong.blogspot.com/2020/09/blog-post.html

回復

使用道具 舉報

發表於 2020-9-30 09:08:05 | 顯示全部樓層
太受用了!
非常感謝版主您的指導
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2021-1-2 11:05:05 | 顯示全部樓層
其他網友提到,若是他不想顯示的欄位在最後面要如何修改。
------------------------------------------------
請問:   [身分證號] [訂單編號] [姓名] [訂單狀態] ,我有看到您隱藏了查詢身分證號的範例。 我想請問您 如果我資料庫欄位有 [身分證號] [訂單編號] [姓名] [訂單狀態] [欄位1] [欄位2]

我查詢時 我想隱藏 欄位1 欄位2 不要顯示這兩欄。  這樣的話要怎樣寫程式碼呢~~非常需要您的幫忙,只能先訂閱點讚 萬分感謝老師教學

程式碼,-2代表最後2欄不顯示
  1. function doGet(e) {
  2.   //https://youtu.be/MQV3AlAOtCU 影音說明
  3.   var params = e.parameter;
  4.   var uid = params.uid;


  5.   var Sheet = SpreadsheetApp.getActiveSheet();

  6.   var LastRow = Sheet.getLastRow();
  7.   var LastColumn = Sheet.getLastColumn();
  8.   var data = [];

  9.   // 取得部分顯示資料
  10.   
  11.   var listAll = Sheet.getSheetValues(1, 1, LastRow, LastColumn-2);
  12.   
  13.   // 設定查詢欄位資料
  14.   var inq=Sheet.getSheetValues(1, 1, LastRow, LastColumn-2);
  15.   
  16.   //存標題
  17.   data.push({data: listAll[0]});

  18.   
  19.   // 找尋資料是否有存在
  20.   for(var i = 1;i < listAll.length; i++){
  21.     if(inq[i].indexOf(uid)===0){
  22.       data.push({data: listAll[i]})
  23.     }
  24.   }
  25.   
  26.   //顯示資料
  27.   Logger.log(data);
  28.   
  29.   // 回傳json資料
  30.   return ContentService.createTextOutput(JSON.stringify(data))
  31.     .setMimeType(ContentService.MimeType.JSON);
  32. }
複製代碼

回復 支持 反對

使用道具 舉報

發表於 2021-1-12 05:06:38 | 顯示全部樓層
板主您好,看了一下這篇滿實現的
另外有以下的問題需要向您請益一下
可否用時間來估篩選?
如篩選訂購日期或者用時間戳記的區間:2020/6/10~2020/6/14範圍訂單資料?
目前參考板主的寫法確定如果是選擇單一方式搜尋,是可以搜尋指定日期,當天所有訂單紀錄。
但多條件方式指定一個範圍區間,會出問題,不是出現2020/6/10&2020/6/14這兩天的,要麻就是全都搜尋出來了。
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2021-1-12 08:07:25 | 顯示全部樓層
Francis 發表於 2021-1-12 05:06
板主您好,看了一下這篇滿實現的
另外有以下的問題需要向您請益一下
可否用時間來估篩選?

您好,
     麻煩您參考底下這篇上傳您的程式碼.
如何在discuz張貼程式碼
http://discuz.bestdaylong.com/thread-30239-1-1.html
(出處: 彰化一整天的論壇)
回復 支持 反對

使用道具 舉報

發表於 2021-1-12 10:27:29 | 顯示全部樓層
imingho 發表於 2021-1-12 08:07
您好,
     麻煩您參考底下這篇上傳您的程式碼.
如何在discuz張貼程式碼

謝謝板主,代碼如下
  1. function doGet(e) {
  2.   var params = e.parameter;  
  3.   //訂單進件日期:PTime1      //訂單進件日期:PTime2 //客戶訂單:OorderID         //消費者名稱:CEOName     //訂單內容:BDName
  4.   var PTime1 = params.PTime1,PTime2 = params.PTime2,CEOName = params.CEOName,BDName=params.BDName;
  5.   
  6.   var Sheet = SpreadsheetApp.getActiveSheet();
  7.   
  8.   var LastRow = Sheet.getLastRow();
  9.   var LastColumn = Sheet.getLastColumn();
  10.   var data = [];

  11.   // 取得全部資料
  12.   //var listAll = Sheet.getSheetValues(1, 1, LastRow, LastColumn);
  13.   //部分顯示資料從第2列 取得到第27列
  14.   var listAll = Sheet.getSheetValues(1, 2, LastRow, 27);

  15.   // 取得部分顯示資料
  16.   //var listAll = Sheet.getSheetValues(1, 2, LastRow, LastColumn-1);

  17.   //存標題
  18.   data.push({data: listAll[0]})
  19.   
  20.   // Search資料是否有存在
  21.   for(var i = 1;i < listAll.length; i++)
  22.   {//for以下開始
  23.     //第1欄,由0開始---以下是參考範例寫法
  24.     //if(listAll[i].indexOf(PTime) ===0 && listAll[i].indexOf(OorderID) ==10 ||  listAll[i].indexOf(CEOName) ==11 ){ }
  25.     //if(listAll[i].indexOf(OorderID) ==10 &&  listAll[i].indexOf(CEOName) ==11 ){ }
  26.     // if((listAll[i].indexOf(OorderID) == 10 ) || (listAll[i][11].indexOf(CEOName)  != -1) || (listAll[i].indexOf(OorderID) == 10  && listAll[i][11].indexOf(CEOName)  != -1 ))

  27.       //↓以下這一段是可以模糊搜尋,但目前寫法仍有問題,待修正。
  28.      //if(listAll[i][11].indexOf(OorderID) != -1 ){}
  29.      
  30.   //Search某字串在字串内的位置(indexOf)
  31. if(listAll[i].indexOf(PTime1) ===0 && listAll[i].indexOf(PTime2) === 0  )
  32.        {

  33.           //範例 if((listAll[i].indexOf(PTime_1) ===0 && listAll[i].indexOf(OorderID) ===11 ) || (listAll[i].indexOf(OorderID) ===10&& listAll[i].indexOf(CEOName) ===11 ))
  34.           { //第1欄,由0開始
  35.               if(BDName!="" && (listAll[i].indexOf(OorderID) ===10 || listAll[i].indexOf(CEOName) ===11 ))     
  36.                 {
  37.                   Sheet.getRange("S"+(i+1)).setValue(BDName);//寫回訂單內容物狀態
  38.                   Sheet.getRange("T"+(i+1)).setValue("尚未完成匯款");//寫回狀態
  39.                   Sheet.getRange("R"+(i+1)).setValue(new Date());//寫回訂單變更日期狀態
  40.                   //listAll[i]=Sheet.getSheetValues(i+1,1,1,LastColumn)[0];//重新讀取
  41.                   listAll[i]=Sheet.getSheetValues(i+1,2, LastRow, 27)[0];//重新讀取
  42.                 }
  43.          
  44.               //去個資顯示
  45.                   listAll[i][11]=string_add_symbol(listAll[i][11],"*");
  46.                   data.push({data: listAll[i]});
  47.           }
  48.         }
  49.   }//for以上結束
  50.   
  51.   
  52.   //顯示資料
  53.   Logger.log(data);
  54.   
  55.   // 回傳json資料
  56.   return ContentService.createTextOutput(JSON.stringify(data))
  57.     .setMimeType(ContentService.MimeType.JSON);
  58.   
  59.   Sheet.getSheet
  60. }

  61. function string_add_symbol(s,symbol)
  62. {
  63.    var ss="";
  64.    for(var i=0;i<s.length;i++)
  65.      {
  66.       
  67.        if(s.length==3 && i%2===1){//名稱字串等於3or4時,奇數加符號
  68.          ss=ss+symbol;         
  69.        }else if(s.length===4 && i%3===2)
  70.          ss=ss+symbol;         
  71.          else
  72.          //ss=ss+s.substring(i,i+1);
  73.          ss=ss+s.substring(i,i+1);      

  74.       }
  75.   return ss;
  76. }
複製代碼
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2021-1-12 11:10:00 | 顯示全部樓層
Francis 發表於 2021-1-12 10:27
謝謝板主,代碼如下

請參考底下的範例自行修改.
  1. function Test() {
  2.   //https://youtu.be/MQV3AlAOtCU 影音說明

  3.   var BeginDate = Date.parse('2019/8/1');  //將文字日期轉換成日期格式
  4.   var EndDate=Date.parse('2019/8/4'); //將文字日期轉換成日期格式

  5.   var Sheet = SpreadsheetApp.getActiveSheet();

  6.   var LastRow = Sheet.getLastRow();
  7.   var LastColumn = Sheet.getLastColumn();
  8.   var data = [];

  9.   // 取得全部資料
  10.   var listAll = Sheet.getSheetValues(1, 1, LastRow, LastColumn);
  11.   
  12.   //存標題
  13.   data.push({data: listAll[0]})

  14.   
  15.   // 找尋資料是否有存在
  16.   for(var i = 1;i < listAll.length; i++){
  17.     if(listAll[i][5]>=BeginDate && listAll[i][5]<=EndDate){
  18.       data.push({data: listAll[i]})
  19.     }
  20.   }
  21.   
  22.   //顯示資料
  23.   Logger.log(data);
  24.   
  25. }
複製代碼
回復 支持 反對

使用道具 舉報

發表於 2021-1-12 12:15:40 | 顯示全部樓層
imingho 發表於 2021-1-12 11:10
請參考底下的範例自行修改.

謝謝板主,已經修改並測試完成了,
另外請問html部份的語法是不是也需要一併做修改???
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2021-1-12 13:28:18 | 顯示全部樓層
本帖最後由 imingho 於 2021-1-12 14:16 編輯
Francis 發表於 2021-1-12 12:15
謝謝板主,已經修改並測試完成了,
另外請問html部份的語法是不是也需要一併做修改??? ...

是的.

請參考.
如何設計訂單查詢系統_日期區間顯示【Google表單教學】
http://discuz.bestdaylong.com/thread-39138-1-1.html
(出處: 彰化一整天的論壇)


回復 支持 反對

使用道具 舉報

發表於 2021-1-13 13:15:45 | 顯示全部樓層

謝謝板主,今天研究了一下,實測後發現兩個問題,當資料庫(試算表內)日期部份欄位部份有以下事項要注意了,
1.格式必需設為日期格式。
2.如果有帶函數(舉例:=text(b1,"yyyy/mm/dd"))的,無法搜尋到。
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)

GMT+8, 2021-7-26 00:45 , Processed in 0.117252 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表