彰化一整天的論壇

 找回密碼
 立即註冊
查看: 13927|回復: 65

google表單訂單查詢加匯款後3碼輸入【Google表單教學】

[複製鏈接]
發表於 2020-10-10 11:24:22 | 顯示全部樓層 |閱讀模式
本帖最後由 imingho 於 2021-9-6 15:11 編輯

Google協助平台
https://sites.google.com

查詢網址1(Google協助平台):
https://sites.google.com/view/inputatm/
查詢網址2(Google Blogstpot):
https://bestdaylong.blogspot.com/2020/10/google3.html

試算表:https://docs.google.com/spreadsh ... Do/edit?usp=sharing
(請建立複本)


試算表:

  1. function doGet(e) {
  2.   //https://youtu.be/sukRGQDj1G4 影音說明
  3.   var params = e.parameter;
  4.   var orderID = params.orderID;//訂單編號
  5.   var Mobile = params.Mobile;//手機號碼
  6.   var atmNO=params.atmNO;//匯款後3碼

  7.   var Sheet = SpreadsheetApp.getActiveSheet();

  8.   var LastRow = Sheet.getLastRow();
  9.   var LastColumn = Sheet.getLastColumn();
  10.   var data = [];

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

  16.   
  17.   // 找尋資料是否有存在
  18.   for(var i = 1;i < listAll.length; i++){
  19.     if(listAll[i][1]==orderID && listAll[i][3]==Mobile){ //第2欄,由0開始
  20.       if(atmNO!="")
  21.       {
  22.         Sheet.getRange("E"+(i+1)).setValue(atmNO);//寫回後3碼
  23.         Sheet.getRange("F"+(i+1)).setValue("已匯款");//寫回狀態
  24.         Sheet.getRange("G"+(i+1)).setValue(new Date());//寫回狀態
  25.         listAll[i]=Sheet.getSheetValues(i+1,1,1,LastColumn)[0];//重新讀取
  26.       }
  27.       //去個資顯示
  28.       listAll[i][2]=string_add_symbol(listAll[i][2],"*");
  29.       data.push({data: listAll[i]});
  30.     }
  31.   }
  32.   
  33.   //顯示資料
  34.   Logger.log(data);
  35.   
  36.   // 回傳json資料
  37.   return ContentService.createTextOutput(JSON.stringify(data))
  38.     .setMimeType(ContentService.MimeType.JSON);
  39.   
  40.   Sheet.getSheet
  41. }

  42. function string_add_symbol(s,symbol)
  43. {
  44.    var ss="";
  45.    for(var i=0;i<s.length;i++)
  46.      {
  47.        if(i%2==1)//奇數加符號
  48.          ss=ss+symbol;
  49.        else
  50.          ss=ss+s.substring(i,i+1);
  51.       }
  52.   return ss;
  53. }
  54. function test()
  55. {
  56.   Logger.log(string_add_symbol("彰化一整天","*"));
  57. }
複製代碼




前端:
  1. <html>
  2. <head>
  3. <meta charset="UTF-8"></meta>
  4. <script type="text/javascript">
  5. var dateReviver = function (key, value) {
  6.     var a;
  7.     if (typeof value === 'string') {
  8.         a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
  9.         if (a) {
  10.             return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
  11.         }
  12.     }
  13.     return value;
  14. };
  15. function bestdaylong_inq(orderID,Mobile,atmNO)
  16. {
  17. var xmlhttp;

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

  49.           }
  50.     var url="https://script.google.com/macros/s/AKfycbwT07qJiMbArGqXy32Y5vSGP3GENYF7l5zpuI24zg/exec";
  51.     xmlhttp.open("get",url+"?orderID="+orderID+"&Mobile="+Mobile+"&atmNO="+atmNO,true);
  52.     xmlhttp.send();
  53. }
  54. </script>
  55. </head>
  56. <body>

  57. 輸入訂單編號:<input id="orderID" type="text" /><br />
  58. 輸入手機號碼:<input id="Mobile" type="text" /><br />
  59. 輸入匯款後3碼(不輸入表示要查詢):<input id="atmNO" type="text" /><br />
  60. <input name="inq" onclick="bestdaylong_inq(orderID.value,Mobile.value,atmNO.value);" type="button" value="送出" />

  61. <span id="order_status"></span>
  62. </body>
  63. </html>
複製代碼



回復

使用道具 舉報

 樓主| 發表於 2020-10-20 13:50:02 | 顯示全部樓層
kcho 發表於 2020-10-20 09:00
版主你好,
在上述例子經提點修改script後,搜查只須填一項是成功。但發覺有一個嚴重的問題發生。
我測試過 ...

請將程式碼改成如下,只有輸入訂單編號才會更新匯款後5碼。
  1. function doGet(e) {
  2.   //https://youtu.be/sukRGQDj1G4 影音說明
  3.   var params = e.parameter;
  4.   var orderID = params.orderID;//訂單編號
  5.   var Mobile = params.Mobile;//手機號碼
  6.   var atmNO=params.atmNO;//匯款後3碼

  7.   var Sheet = SpreadsheetApp.getActiveSheet();

  8.   var LastRow = Sheet.getLastRow();
  9.   var LastColumn = Sheet.getLastColumn();
  10.   var data = [];

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

  16.   
  17.   // 找尋資料是否有存在
  18.   for(var i = 1;i < listAll.length; i++){
  19.     if((listAll[i].indexOf(orderID) ==1 && listAll[i].indexOf(Mobile) ==3) || (listAll[i].indexOf(orderID) ==1 && Mobile=='') || (listAll[i].indexOf(Mobile) ==3 && orderID=='')){ //第2欄,由0開始
  20.       if(atmNO!="" && listAll[i].indexOf(orderID) ==1)  //有訂單編號跟匯款後3碼才會更新
  21.       {
  22.         Sheet.getRange("E"+(i+1)).setValue(atmNO);//寫回後3碼
  23.         Sheet.getRange("F"+(i+1)).setValue("已匯款");//寫回狀態
  24.         Sheet.getRange("G"+(i+1)).setValue(new Date());//寫回狀態
  25.         listAll[i]=Sheet.getSheetValues(i+1,1,1,LastColumn)[0];//重新讀取
  26.       }
  27.       //去個資顯示
  28.       listAll[i][2]=string_add_symbol(listAll[i][2],"*");
  29.       data.push({data: listAll[i]});
  30.     }
  31.   }
  32.   
  33.   //顯示資料
  34.   Logger.log(data);
  35.   
  36.   // 回傳json資料
  37.   return ContentService.createTextOutput(JSON.stringify(data))
  38.     .setMimeType(ContentService.MimeType.JSON);
  39.   
  40.   Sheet.getSheet
  41. }

  42. function string_add_symbol(s,symbol)
  43. {
  44.    var ss="";
  45.    for(var i=0;i<s.length;i++)
  46.      {
  47.        if(i%2==1)//奇數加符號
  48.          ss=ss+symbol;
  49.        else
  50.          ss=ss+s.substring(i,i+1);
  51.       }
  52.   return ss;
  53. }
  54. function test()
  55. {
  56.   Logger.log(string_add_symbol("彰化一整天","*"));
  57. }
複製代碼
回復 支持 2 反對 0

使用道具 舉報

 樓主| 發表於 2021-1-8 08:25:54 | 顯示全部樓層
intherain 發表於 2021-1-7 23:01
老師,試了許久圖貼不上來,表格如下兩欄六列,我是想要最後一格"要繳交"的字是紅色。謝謝!

班級         ...

修改如下.
  1. for(j=1;j<obj.length;j++)
  2. {
  3.   if(j==6)//第6列字變色
  4.         html+= '<td align="center"></br><font color=red>'+obj[j].data[i]+'</font></td>';
  5.   else
  6.         html+= '<td align="center"></br>'+obj[j].data[i]+'</td>';
  7. }
複製代碼


回復 支持 1 反對 0

使用道具 舉報

 樓主| 發表於 2021-1-8 09:05:37 | 顯示全部樓層
本帖最後由 imingho 於 2021-1-8 09:07 編輯
intherain 發表於 2021-1-8 08:50
報告老師,已修改,沒有變色。謝謝老師。

  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[0].data.length; i ++ ) {//
  26.                                 html  += '<tr>';//
  27.                                 html+= '<td>'+obj[0].data[i]+'</td>';
  28.                                 for(j=1;j<obj.length;j++)
  29.                                 {
  30.                                   if(i==2)//第3列字變紅色
  31.                                     html+= '<td><font color=red>'+obj[j].data[i]+'</font></td>';
  32.                                   else
  33.                                     html+= '<td>'+obj[j].data[i]+'</td>';
  34.                                 }
  35.                                 html  += '</tr>';            
  36.                         }
  37.                         html+="</table>";
  38.                         
  39.                         document.getElementById("order_status").innerHTML=html;
  40.                         if(obj.length==1) //只有一筆代表查不到資料
  41.                                 alert('查無資料');
  42.                   }

  43.           }
  44.     var url="https://script.google.com/macros/s/AKfycbwJOajAYKRM77CELpG5bf5koUbY-TdN24apUJfo22FLsYft9rTP/exec";
  45.         xmlhttp.open("get",url+"?uid="+encodeURIComponent(str),true);
  46.         xmlhttp.send();
  47. }
  48. </script>
  49. </head>
  50. <body>

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

  53. <span id="order_status"></span>
  54. </body>
  55. </html>
複製代碼

範例網址: https://sites.google.com/view/in ... 7%E8%AE%8A%E8%89%B2
回復 支持 1 反對 0

使用道具 舉報

 樓主| 發表於 2021-1-7 14:54:48 | 顯示全部樓層
intherain 發表於 2021-1-7 14:45
老師您好,
不好意思,張貼時出現"沒有權限,發表url連結"

您把有URL的部分先拿掉再上傳.
回復 支持 1 反對 0

使用道具 舉報

 樓主| 發表於 2021-1-6 16:02:14 | 顯示全部樓層
intherain 發表於 2021-1-6 15:55
老師您好,
不好意思,依這篇出來的日期,結果會比原來的excel日期(8/1),少一天(7/31)??
謝謝您。 ...

您好,
     我這邊試沒有問題,麻煩您張試算表及查詢結果.
回復 支持 1 反對 0

使用道具 舉報

發表於 2020-10-19 09:13:32 | 顯示全部樓層
本帖最後由 kcho 於 2020-10-19 09:34 編輯

版主你好,
用你上面的範例測試,在”訂單編號”和”輸入手機號碼”,若只填入單一項,會只彈出”查無資料”,
可改變為只填入單一查詢/或兩個查詢也可找到或查同一個電話,可找到多筆項目?
query "and" 改成 "or" ???


謝謝你的智慧行者。
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2020-10-19 09:45:15 | 顯示全部樓層
kcho 發表於 2020-10-19 09:13
版主你好,
用你上面的範例測試,在”訂單編號”和”輸入手機號碼”,若只填入單一項,會只彈出”查無資料 ...

您只要將
  1. if(listAll[i].indexOf(orderID) ==1 && listAll[i].indexOf(Mobile) ==3){ //第2欄,由0開始
複製代碼

改成
  1. if(listAll[i].indexOf(orderID) ==1 || listAll[i].indexOf(Mobile) ==3){ //第2欄,由0開始
複製代碼

就是只要一個條件符合就可以
回復 支持 反對

使用道具 舉報

發表於 2020-10-20 09:00:59 | 顯示全部樓層
本帖最後由 kcho 於 2020-10-20 09:39 編輯

版主你好,
在上述例子經提點修改script後,搜查只須填一項是成功。但發覺有一個嚴重的問題發生。
我測試過,若仍同時輸入訂單編號和手機號碼,==只輸入手機號碼一樣,仍會列出不同的訂單號碼和匯款碼,這時當你只想再輸入某一訂單的匯款碼,再送出時,結果同一個人的所有訂單的匯款碼會完全自動更改為同一匯款碼。這結果會影响同一個人的所有訂單。
只有單一輸入訂單編號,才會只顯示該筆訂單和匯款碼。然後再輸入該匯款碼再送出,訂單狀態=已匯款。正常。
請問怎解決這問題?是否要加上兩個CheckBox 于兩個搜尋選項中,當只選取一個時,才不會影响另一個
或用兩個Dropdown menu......

謝謝煩到你的心思
上傳圖片有些麻煩攪了很久也排不到順序
第一幅是 test1 or test2 相同的結果
第二幅是test2
第三幅是test1                                                            
      

Or test2

Or test2

qr3.jpg
q1.jpg
qr2.jpg
回復 支持 反對

使用道具 舉報

發表於 2020-10-20 18:40:04 | 顯示全部樓層
imingho 發表於 2020-10-20 13:50
請將程式碼改成如下,只有輸入訂單編號才會更新匯款後5碼。

版主果然好野,測試成功啦。excellent expert.
回復 支持 反對

使用道具 舉報

發表於 2021-1-6 12:41:39 | 顯示全部樓層
老師您好:
請問呈現結果 Fri Jan 01 2021 00:00:00 GMT+0800 (台北標準時間)
如如何修改成 2021/1/1 呢?
謝謝您。
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2021-1-6 14:04:19 | 顯示全部樓層
intherain 發表於 2021-1-6 12:41
老師您好:
請問呈現結果 Fri Jan 01 2021 00:00:00 GMT+0800 (台北標準時間)
如如何修改成 2021/1/1 呢?

請看底下這篇第19篇.
【Google表單教學】如何設計訂單查詢系統
http://discuz.bestdaylong.com/fo ... 38953&fromuid=2
(出處: 彰化一整天的論壇)
回復 支持 反對

使用道具 舉報

發表於 2021-1-6 15:55:21 | 顯示全部樓層
imingho 發表於 2021-1-6 14:04
請看底下這篇第19篇.
【Google表單教學】如何設計訂單查詢系統
http://discuz.bestdaylong.com/forum.php ...

老師您好,
不好意思,依這篇出來的日期,結果會比原來的excel日期(8/1),少一天(7/31)??
謝謝您。
回復 支持 反對

使用道具 舉報

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

本版積分規則

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

GMT+8, 2021-10-19 06:48 , Processed in 0.139059 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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