此專案包含一系列為雲育鏈職場AI軟體暨雲端應用課程設計的Google Apps Script範例程式碼。這些程式碼旨在提升課程參與者的工作效率,涵蓋如何自動化Google Sheets的數據操作、整合Google Gemini API進行AI問答與分類,以及如何生成並計算文本向量相似度等功能。
- HTTP GET/POST 數據處理:自動化Google Sheets中的數據查詢、插入與更新。
- AI 問答與分類:透過Google Gemini API進行文本問答生成及文本分類操作。
- 文本向量生成與相似度計算:將文本轉換為向量表示,並計算其相似度。
- **圖片問答解析:提供圖片URL,將圖片轉換為Base64後,透過Gemini API進行問答。
- **網頁內容抓取與問答生成:自動抓取指定網頁內容,並進行問答生成,增強答案的準確性。
- **PDF文件生成:基於Google Docs範本自動生成PDF文件,並可指定範本參數進行動態替換。
這些Google Apps Script程式碼可在以下情境中應用:
- 自動化數據處理:在企業報告生成過程中,減少手動操作的錯誤與耗時。
- AI 驅動的文本分類與分析:快速分類客戶反饋,提取重要資訊並及時做出決策。
- 向量相似度計算:在客服系統中快速找到相似問題的解答,提升客服效率。
- 業務流程自動化:自動處理和分類來自各部門的數據,提升生產力。
如需課程包班合作,可加入Line官方號進行:https://lin.ee/nlPnBYS
- 複製專案:將此專案克隆至您的Google Apps Script專案中。
- 配置API Key:在專案設定中加入Google Gemini API的密鑰。
- 運行範例:使用範例函數進行測試,確認API整合與功能正常運作。
本專案依照MIT License開源,歡迎自由使用、修改與分發。如需進一步合作或課程包班合作,請參考雲育鏈官網。
如有任何問題或建議,歡迎通過雲育鏈Line官方號聯繫我們。
本教學將介紹如何在Google Spreadsheet中使用Google Apps Script調用Gemini API來實現自動化功能。透過這個教學,您將學會如何使用Apps Script來完成問答生成、文本分類及向量操作。
取得Google API金鑰(API Key) 請確保您已經從Google AI Studio 取得了Gemini API的API Key。 並在該Appscript管理介面,新增了指令碼屬性 Script Property
確保已經將程式碼添加到您的Google Apps Script專案中。
- GeminiQA 使用教學
- GeminiQAFromImage 使用教學
- GeminiClassify 使用教學
- GeminiVector001 使用教學
- GeminiVectorSimilarCalculate 使用教學
- GeminiQAWithWeb 使用教學
- doGet 使用教學
- doPost 使用教學
GeminiQA
函數用於透過Google Apps Script調用Gemini API,針對您提出的問題生成對應的答案。您只需要提供一個問題,Gemini API將返回最合適的答案。
- 在Google Spreadsheet中使用:
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiQA
:
=GeminiQA("你的問題")
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiQA
函數用於透過Google Apps Script調用Gemini API,針對您提出的問題生成對應的答案。您只需要提供一個問題,Gemini API將返回最合適的答案。
- 在Google Spreadsheet中使用:
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiQA
:
=GeminiQA("你的問題")
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiQAFromImage
函數用於透過Google Apps Script調用Gemini API,將圖片轉換為Base64格式後進行問答生成。您可以提供一個問題和圖片的網址,並由Gemini API返回解析結果。
- 在Google Spreadsheet中使用:
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiQAFromImage
:
=GeminiQAFromImage("你的問題", "圖片網址")
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiClassify
函數用於透過Google Apps Script調用Gemini API,將輸入的文本內容根據指定的分類進行分類操作。您可以提供一個分類數組和要分類的文本內容,Gemini API將返回對應的分類結果。
- 在Google Spreadsheet中使用:
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiClassify
:
=GeminiClassify({"分類1", "分類2", "分類3"}, "要分類的內容")
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiVector001
函數用於透過Google Apps Script調用Gemini API,生成文本的向量表示。該向量表示可以用於計算文本相似度或進行其他向量操作。
- 在Google Spreadsheet中使用:
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiVector001
:
=GeminiVector001("要生成向量的文本")
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiVectorSimilarCalculate
函數用於透過Google Apps Script計算兩個向量之間的相似度。該相似度通常以餘弦相似度的形式表示,範圍在 -1 到 1 之間。該函數可以用於比較兩段文本的相似程度,前提是這兩段文本已經被向量化。
- 在Google Spreadsheet中使用:
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiVectorSimilarCalculate
:
=GeminiVectorSimilarCalculate("向量1的字串", "向量2的字串")
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
=GeminiVectorSimilarCalculate("0.123, 0.456, 0.789", "0.321, 0.654, 0.987")
GeminiQAWithWeb
由於Gemini尚未支援中文當作function call,請注意此方法一定要用英文來問, 函數用於透過Google Apps Script調用Gemini API,處理更為複雜的問答生成任務。這個函數允許在問答過程中使用特定功能(如抓取網頁內容)來補充和擴展答案,從而提升回答的準確性和全面性。
- 在Google Spreadsheet中使用:
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiQAWithWeb
:
=GeminiQAWithWeb("你的問題,請用英文表達,若有網址,則會幫你訪問此網址")
- 在Spreadsheet的任意儲存格內輸入以下公式來調用
GeminiQAWithWeb("What content is available on https://example.com?")
doPost
函數用於處理HTTP POST請求,根據 function_name
參數執行不同的操作:
insert_data
:將請求的JSON數據插入到指定的Google Spreadsheet工作表中,並根據表頭自動匹配相應的欄位進行插入。mail_user
:根據提供的收件人列表發送郵件,若未指定信件標題,則會自動使用當天日期作為預設標題。store_image_to_drive
:將指定的網路圖片下載並儲存到Google Drive中,若提供了folder_name
,則會儲存在指定資料夾內,否則將以當前Spreadsheet的名稱作為資料夾名稱。create_pdf_from_doc_template
:使用指定的Google Docs範本自動生成PDF,並根據POST中的替換字典自動替換範本中的關鍵字或標記。可選擇將生成的PDF儲存在指定的Google Drive資料夾中,並設定權限為「有連結的人可讀」,方便共享。若未提供檔案名稱或資料夾,系統將自動命名並儲存於範本文件的父資料夾中。
這些功能適合於需要自動化地將數據寫入Google Spreadsheet或發送郵件的情境。
- 在Google Apps Script編輯器中,點擊
部署
>部署為網頁應用
。 - 設定應用的訪問權限為
任何擁有此應用程式網址的人
。 - 點擊
部署
,並獲取應用的URL。
- 使用HTTP客戶端(如Postman、cURL)向應用的URL發送POST請求。
- 根據不同的功能,在POST Body中指定
function_name
及其他所需參數。
請求正文應為JSON格式,包含以下參數:
{
"sheet_name": "Sheet1",
"operate_method": "insert_data",
"data": {
"id": "001",
"columnB_name": "王小明",
"columnC_name": "這是一筆測試資料"
},
"index_column_name": "id"
}
使用cURL發送請求:
curl -X POST \
https://script.google.com/macros/s/your-script-id/exec \
-H 'Content-Type: application/json' \
-d '{
"sheet_name": "Sheet1",
"operate_method": "insert_data",
"data": {
"id": "001",
"columnB_name": "王小明",
"columnC_name": "這是一筆測試資料"
},
"index_column_name": "id"
}'
Response
{
"status": "success",
"message": "新增資料成功"
}
Request data format
{
"sheet_name": "Sheet1",
"operate_method": "read_data",
"data": {
"id": "001"
},
"index_column_name": "id"
}
curl 範例
curl -X POST "YOUR_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"sheet_name": "Sheet1",
"operate_method": "read_data",
"data": {
"id": "001"
},
"index_column_name": "id"
}'
Response format
{
"status": "success",
"data": [
{
"id": "001",
"name": "王小明",
"content": "這是一筆測試資料",
"similarity": 0.98
}
]
}
request format
{
"sheet_name": "Sheet1",
"operate_method": "read_data",
"data": {
"columnA_name": "測試向量查詢的內容"
},
"index_column_name": "vector_columnA_name",
"threshold": "0.8"
}
curl format
curl -X POST "YOUR_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"sheet_name": "Sheet1",
"operate_method": "read_data",
"data": {
"columnA_name": "測試向量查詢的內容"
},
"index_column_name": "vector_columnA_name",
"threshold": "0.8"
}'
response format
{
"status": "success",
"data": [
{
"id": "001",
"name": "王小明",
"content": "這是一筆測試資料",
"similarity": 0.85
}
]
}
Request format
{
"sheet_name": "Sheet1",
"operate_method": "update_data",
"data": {
"id": "001",
"name": "王大明",
"content": "更新後的內容"
},
"index_column_name": "id"
}
curl format
curl -X POST "YOUR_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"sheet_name": "Sheet1",
"operate_method": "update_data",
"data": {
"id": "001",
"name": "王大明",
"content": "更新後的內容"
},
"index_column_name": "id"
}'
Response format
{
"status": "success",
"message": "更新資料成功"
}
Request format
{
"sheet_name": "Sheet1",
"operate_method": "delete_data",
"data": {
"id": "001"
},
"index_column_name": "id"
}
curl format
curl -X POST "YOUR_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"sheet_name": "Sheet1",
"operate_method": "delete_data",
"data": {
"id": "001"
},
"index_column_name": "id"
}'
Response format
{
"status": "success",
"message": "刪除資料成功"
}
{
"operate_method": "generate_pdf",
"data": {
"template_name": "文件範本",
"generate_pdf_name": "報告",
"folder_name": "PDF資料夾",
"replace_map": {
"title": "報告標題",
"date": "20250402"
}
}
}
使用cURL發送請求
curl -X POST "YOUR_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"operate_method": "generate_pdf",
"data": {
"template_name": "文件範本",
"generate_pdf_name": "報告",
"folder_name": "PDF資料夾",
"replace_map": {
"title": "報告標題",
"date": "20250402"
}
}
}'
Response format
{
"result": "success",
"fileName": "20250402-報告.pdf",
"fileLink": "https://drive.google.com/...",
"message": "PDF 已生成並設為有連結的人可讀"
}