使用 App Inventor 將文字欄位資料寫入 Google 試算表
Google Sheets 是一個非常好用的工具,它能夠當作一個小型的資料庫來使用,也因此 App Inventor 有很多範例,都是搭配 Google Sheets 來儲存資料。今天來介紹,如何把資料存進 Google Sheets 裡面。
2022/11/14 更新
做了一個新的 App「雲端留言板」,欄位只有暱稱和留言內容,做法和文章教學一樣!
2021/11/08 更新
如果網頁檔案無法顯示,可以自行到模擬器尋找檔案路徑,以我的為例:
file:///sdcard/Android/data/edu.mit.appinventor.aicompanion3/files/AppInventor/assets/index.html
*2021/08/10 更新
因為原本的表單突然不能用了!(可以讀但不能寫)
所以這邊附上最新版的 aia 檔案
更新的部份只有表單網址和試算表網址,其它都保持不動!
一、Google 雲端硬碟 操作
1. 首先進入到 Google Drive,並新增一個 Google 表單。
2. 建立欄位資料:帳號 ID、使用暱稱和密碼。
3. 於表單標題的上方,點選「回覆」,並點選「建立試算表」。
選擇「建立」
建立好後會開啟一個試算表的分頁
P.S. 如果要先建立試算表也可以,只要在試算表的「工具」選項,點選「建立表單」即可。
4. 回到表單的頁面,點選右上方的三個小點的按鈕,選擇「取得預先填入的連結」。
5. 於欄位中填入資料,然後點選「取得連結」按鈕。
於左下角框框點選複製連結
然後先貼到記事本
我們需要用到 entry 的資料,有幾個欄位就有幾個 entry。
6. 接著複製表單的網址,並貼到記事本。
把網址後面的 prefill 改成 formResponse 如下:
接著開始製作 App
二、操作 App Inventor 建立 App
1. 新增一個專案,將標籤、TextBox、按鈕、對話框和網路元件,拖拉到工作面板,如下:
此 App 的功能為,當按下送出按鈕,就將欄位資料送入至 Google Sheets。
2. 開始撰寫程式碼,拖拉一個變數方塊,取為表單網址,右邊放字串方塊,內容填入剛剛更改的網址。
3. 拖拉一個可回傳的定義程序方塊,功能如下:
4. 當送出按鈕被點選,檢查欄位是否不為空,如果都有填寫,就設定網路元件的網址,並執行 GET 請求。
網址格式為:
https://docs.google.com/forms/d/表單代碼/formResponse?entry.xxxxxxxxx=你輸入的值&entry.xxxxxxxxx=你輸入的值
表單網址後面要接 ?,後面再帶入參數,每個參數要用 & 連結。
5. 當網路元件取得文字,判斷回應程式碼是否為 200,200 代表成功。
資料已傳送到 Google 試算表
46 則留言
自動引用通知:
yu jyun
你好,最近使用 使用表單來做app專題,發現一個問題就是會出現
“有人檢舉這個項目含有不當內容,因此無法繼續共用這個項目。” “要求審查” ” 關閉”
之後 就無法寫入成功。
今年建置表單就會出現這個問題, 2020之前不會出現問題, 是不是 今年開始有這狀況?
請教您了,謝謝。
JamesBang
同學妳好,如果我沒記錯,之前 Google 表單底下本來就有「檢舉濫用情形」可以點選。妳只是剛好在今年被檢舉
如果向 Google 提交審核後還是不能用,妳可以試試看把表單先刪除,然後再到妳的試算表,上方功能列選擇「工具」–> 「建立表單」,這樣會建立一個新表單,表單的代碼會更新,但記得先把試算表 Copy 起來,以免資料不見,或者是妳就直接建立一個新的試算表,把現有的資料直接選起來 Copy 過去,這應該是目前最快的做法了!App 的部分也只要改代碼就好。
同學如有其他問題歡迎再提問!謝謝
YCY-TONY
無法傳送密碼,請使用IFTTT的webhook功能
YCY-TONY
GOOGLE表單禁止傳送密碼,所以建議使用ifttt
YCY-TONY
https://ifttt.com/home
JamesBang
感謝提醒!下次有空再來試試看
hai
無法寫入中文,在Google sheet會出現“?”,請問如何處理
JamesBang
可以在合併網址那裡,「欄位.文字」前加上「呼叫網路元件的 URI 編碼」方塊試試看。
因為是使用 GET 的方式傳送資料,我們的資料會打在網址列,而要在網址列打中文的話,就要用 URI 編碼方塊做轉換。
https://i.imgur.com/oPRBREw.png
Benson
請問之前看了您的方式製作,以前可以成功寫入試算表,但現在沒辦法寫入,請問該如何解決
JamesBang
你好,我剛剛測試過,還是可以正常寫入的,不過這個教學文章最一開始用的試算表,也是無法寫入沒錯,有網友說是因為試算表不能有密碼…… 等等的字,不知道你是不是也是類似情形!?
可以新建一個試算表測試看看,如果方便的話,也可以把 aia 檔案和試算表分享給我,我明晚有空可以幫你看看。
我的信箱:[email protected]
Ray
您好,我使用自己寫的,跟您提供下載的模組,都無法使用,方便請您看看嗎?
我使用以下兩種,都能在電腦網址列執行成功,正常收到表單回應
https://docs.google.com/forms/d/e/1FAIpQLSeu7m12OoBvgPxXjOPhRI-qrlgMSC9wrEQdhp7M0O5dAtw5sg/formResponse?entry.1518857705=aaa&entry.353695807=sss&entry.1345864923=ddd
https://docs.google.com/forms/d/e/1FAIpQLSeu7m12OoBvgPxXjOPhRI-qrlgMSC9wrEQdhp7M0O5dAtw5sg/formResponse?usp=pp_url&entry.1518857705=aaa&entry.353695807=sss&entry.1345864923=ddd
但放在APP就不行,直接放網址跟代入文字輸入和內容都沒辦法
JamesBang
你好,我把你提供的網址打到網址列,頁面顯示「表單已不接受回應」。
https://i.imgur.com/WLmYV76.png
這個範例我剛剛測試,還是可以執行的,你可以試試看把試算表的權限打開,在右上角有個共用,可以在這裡做設定,改成「知道此連結的使用者」後,應該就能寫入了!
還是不行的話可以把你專案的 aia 檔案寄給我,我有空可以幫你看看。
[email protected]
yenyen
您好,我參考您的寫法,直接輸入網址的話可以填寫google 表單,但是用app inventor的話就沒辦法成功
預先填入的連結:
https://docs.google.com/forms/d/1XcZIJ8ommIKamg6AHTlcMAqAm_2TFAjEbd6WmrVbra0/formResponse?entry.2130076346=123&entry.2095961065=123&entry.911781297=123&entry.110701120=123
我目前做的aia檔案:
https://drive.google.com/file/d/1oU_VJfHgZkcVrj-A2EF4rAD6i1Sth5If/view?usp=sharing
可以麻煩您看一下問題在哪裡嗎?我找蠻久都沒有找到我錯誤的地方。
另附上我的信箱:
[email protected]
萬分感謝。
JamesBang
好的!我晚點有空幫妳看看
JamesBang
同學妳好!
我剛剛測試後,發現兩個地方有問題。
1. 檢查欄位 副程式
判斷輸入框是否為空,要拉「文字輸入框.文字」方塊。
https://i.imgur.com/hUbPx5g.png
2. 送出按鈕的條件判斷,當為 True 的時候,妳只有設定網址,設定網址後還需要呼叫網路元件,執行 GET 請求,才會將資料送出喔~~
https://i.imgur.com/jQtZQtK.png
https://i.imgur.com/9IASnur.png
https://drive.google.com/file/d/1TBq9mnUx2EckGNtHPVo8m5mdw5x2IRPk/view?usp=sharing
有問題歡迎再詢問 😀
Hsuan
您好,我參考您的寫法,直接輸入網址的話可以填寫google 表單,但是用app inventor的話會顯示寫入失敗
(另外想問一下,回傳值200是您自己定的嗎,那如果使用其他數字可以嗎?)
預先填入的連結:
https://docs.google.com/forms/d/e/1FAIpQLSdhGBudVtmttLM1SoJbwHCmm3N39DNYUcNW7z5yg1TE-s4U1A/viewform?usp=pp_url&entry.1236128309=2&entry.1712071543=2&entry.723235945=5
此為我目前做的檔案:https://drive.google.com/file/d/1VqW5TbjRHJfR7pAJJICUEysogoCgjqvv/view?usp=sharing
附上我的信箱:
[email protected]
可以麻煩您幫忙看一下問題在哪裡嗎?萬分感謝。
Hsuan
抱歉!!!!!!!!!剛剛後來發現成功了!感謝您的教學,非常受用。
JamesBang
OK!
回傳值 200 不是我定的,不同的數字有其他的意思,你可以查詢「HTTP 狀態碼」。
如有問題歡迎再留言詢問,不過我這兩天跑大禹嶺,手邊沒電腦,要之後才有時間回覆 😄
Yan
您好,我從youtube看到您的影片從而到此學習,
我現在是因為6/15就要交作業在做簡易點餐系統,
我使用這功能是想計算金額,
因為初始值已經被用來記錄以點的菜品,我只好另找其他辦法計算金額,
自己摸索了好幾天求道無門,上網查了也看不懂照做也沒有用,
看著您的教學也做了一些,因為我製作的有多個螢幕,
所以只有在一開始的screen1、soup、bill三個螢幕關於這教學的方塊,
但我嘗試了好幾次,我的金額都沒有進入表單跟試算表。
附上我的信箱:
[email protected]
實在不知道是哪個環節出現了問題,可以請您幫忙看一下問題出在哪裡嗎?非常感謝。
Yan
檔案連結忘了放
https://drive.google.com/file/d/1bLaL85LZOmsUAM9ChpJMMrMVL3m0Dplc/view?usp=sharing
JamesBang
soup 螢幕:
1. 因為妳「確認按鈕被點選」那裡的條件判斷下錯了!所以只要變數金額有值,條件判斷就不會為 True,因此下方敘述是不會執行的。
2. 網址格式錯了!要在網址傳參數,得要在網址後面用 ? 連接,如有多個參數,不同參數間再用 & 連接。
bill 螢幕:
1. 變數 datas 為二維清單,要取得裡面的金額要用兩個「選擇清單…索引值為…」方塊。
2. 所以無法將金額.文字 直接加變數 datas。
P.S. 我新增了一個變數暫存金額,來將讀取到的金額做加總
Screen1 螢幕:
建議按鈕高度設自動就好,我這裡顯示的字都被切掉了。
https://i.imgur.com/hHXPT1w.png
https://drive.google.com/file/d/1uJFlJMUyvUJsunjSq4VR7P4klaPFJ5NY/view?usp=sharing
Yan
謝謝你!!!在這叫天天不應,叫地地不靈的時候,拯救了我,我老師都把我已讀了…
你給的建議我都收到了,你真的好厲害,我糾集了好幾天的問題,你就這樣解決了。
JamesBang
被老師已讀,那就親自殺到他辦公室 哈哈哈
不客氣!很高興能幫上忙,有問題歡迎再留言 😄
Yan
我又來了XDD
我拿了檔案後測試發現金額沒有顯示所以有做了些小改動
但卻發現金額的數字越來越不妙,
才發現那個金額是從一開始一直加下來的金額,
有什麼方法能再按除過後也將表單內容清除嗎?
這是新的檔案:
https://drive.google.com/file/d/1BLqE5nAgh2kWON-wF1Xay4J_xM712eoJ/view?usp=sharing
JamesBang
妳好,如果妳要刪除已經存入試算表的資料,只能靠手動的方式,或使用 Google Apps Script,但那又是另一門技術了!
其實我看妳的專案,並不需要把金額存入試算表再讀出,妳可以在開啟其他螢幕時,直接用傳值的方式即可,妳可以建立一個清單變數,把要傳過去的資料存在此變數裡,在傳送時就拉這個清單變數就好,到了另一個螢幕,可以用取得初始值的方塊接收,這時候接收的資料會是清單格式,所以一樣用一個「選擇清單…索引值為…」方塊,來取得資料。
因為我現在手邊沒電腦,需要示範的話要等晚一點。
Yan
我瞭解又不瞭解的感覺,總而言之是換成清單變數嗎?
JamesBang
我剛剛測試發現,不用再拉一個清單變數!我做了一個簡單的範例妳看看:
https://i.imgur.com/oSJ722X.png
https://i.imgur.com/WWuX5XS.png
https://drive.google.com/file/d/11wDctwxooih2tOmu8ar0gnwH4vWsjYzk/view?usp=sharing
這樣妳就不用用到試算表了!直接傳值就好
Yan
謝謝你,我成功了~~~
好人有好報,祝你未來一切順利~~~
JamesBang
不客氣!也祝福你順心順利
Shrimp
老師好
哈哈我又來請問我遇到的問題了
我想上傳資料,但是一直出現以下錯誤訊息,我用手機模擬,手機也會發生這種情況,一直搞不定
https://imgur.com/a/u3qWD2v
其實用app inventor上傳資料到google sheet我做過很多次了,按道理來說已經很熟練了,這情形還是第一次遇到,重點是…雖然每次上傳一直都會跳錯誤訊息出來,但是我要上傳的資料確實都有上傳成功,我就納悶了,到底為什麼會這樣?!
Shrimp
多補上一張照片,沒有URI編碼的我也試過了,還是一樣的情況
https://imgur.com/a/FBvwsH2
JamesBang
你好,目前看你上傳的程式沒有問題,跳出的錯誤訊息是「將 CSV 表格轉清單」的方塊出錯,但你傳的圖片中我沒看到這個方塊
所以你檢查一下,你的資料來源是不是 CSV 資料?
如果是的話再看是 CSV 表格還是列?
如果是一列,你可以將這個方塊改成「將 CSV 列轉清單」試試看
Shrimp
老師
請問您解說的第二段該怎麼去辨認?list 清單這一塊我很弱…一直無法有效理解。
我下載資料的時候,有放一個方塊「CSV表格轉清單 CSV文字」,不知道會不會是這個方塊的關係? 請看下方圖片
https://imgur.com/a/9BnuZog
可是前陣子在另一篇您的教學中,反覆提問「如何在同一個google sheet又上傳資料也下載資料」這個議題,裡面下載的資料也有使用到「CSV表格轉清單 CSV文字」方塊,但這個就完全沒問題(同一個專案但不同Screen),請看下方圖片
https://imgur.com/a/lfZaQvu
我需要提供.aia檔案嗎?總覺得我的描述好像不太清楚….
JamesBang
你好,如果你方便的話可以傳 aia 檔給我,我的信箱:[email protected]
我在外面辦事情,晚點載完小孩有空再幫你看看
清單其實很簡單,在其它程式語言叫陣列,我晚點一併講清楚
Shrimp
老師
我已經把.aia寄給您了,剛才我看了自己的程式碼,還是摸不著頭緒…
JamesBang
已收到
77
請問如果可以寫進表單但是警告訊息不會出現是甚麼問題?
JamesBang
如果能寫入成功,那麼回應程式碼會是 200,然後再用對話框元件來顯示訊息;我剛剛測試 App 是有顯示訊息的,如果方便的話,你可以截圖給我看看
JamesBang
https://i.imgur.com/R4HFXds.png
77
https://drive.google.com/file/d/1EDATs1237UoQC94Ql4tDnMdvBkRs-fmZ/view?usp=sharing
在screen2按測試傳送可以 但用藍芽接收arduino傳來的值在寫入表單就不會跳出對話框
77
還有如果要在寫入之前判斷寫入的值是不是已經在裡面可以怎麼寫?謝謝!!
JamesBang
你好,因為我這裡沒辦法連結你藍芽裝置,也不知道你資料長怎樣,也看不到試算表,所以我直接將你的 Label1 元件設為 3,並將計時器在一開始就打開,在執行計時器內的寫入資料的功能時,對話框是有跳出來的!
https://i.imgur.com/Hn7fe3G.png
所以你再檢查看看,你所下的條件判斷,在你接收到藍芽資料後,是不是會跑到送出資料至表單的程式
———————–
如果要在寫入之前判斷寫入的值是不是已經在裡面?
Ans: 可以利用 boolean 變數、清單變數、清單迴圈、中斷和「資料是否已存在清單」方塊,來達成你的需求。
將寫入過的值加到清單變數,每次要寫入前先用清單迴圈跑一次,看下次要寫入的資料是否已在裡面,有找到的話就設定 boolean 變數為 True 或 False (看你要怎麼設定),並使用中斷跳出迴圈,最後就利用這 boolean 變數來判斷是不是要將資料寫入試算表。
———————–
建議:你計時器裡不同條件判斷所要執行的程式方塊都一樣,只差在索引值,所以可以將程式方塊寫成可傳值的函式 (程序方塊),直接呼叫它使用就好。
77
謝謝你我嘗試一下!
77
接收藍芽資料後是可以寫入資料的,那請問還有可能是哪裡有問題
JamesBang
我本來在想會不會是你計時間隔設太小了,每 0.001 秒就執行一次計時器,但我測試後對話框還是有跳出來一堆的;如果有執行 GET 請求就會觸發 GotText 或 GotFile 事件,因為你 SaveResponse 是 False,所以是觸發 GotText 事件,依照你的寫法,不論資料是否有成功寫入,都一定會跳出對話框才對!
所以你試著 print 出回應程式碼,看 HTTP 狀態碼是多少?
或把計時間隔設高一點看看