Google Sheets API,在 Google Apps Script 上的好用部份

閱讀時間約 15 分鐘

本篇要解決的問題

之前寫過蠻多篇關於 Google Sheets 的應用,卻一直沒仔細的看過官方文件。取值、寫值靠的是別種的方法而不是原有的 Google Apps Script 的內建函式。
最近因為一些事情,覺得將來可能有機會拿 Google Sheet 當一個小資料庫來用,就認真的閱讀了文件,把認為會用到的一些函式給存下來,未來如果機會成熟了,就可以回頭來看這篇使用。
本篇是 August 看過了一遍 Google Apps Script 關於 Google Sheets 的文件後,選出的幾個好用函式,實際使用看效果並存下來,並沒有包含所有文件上提到的內容。
以下提到 Google Apps Script 的部份簡稱 GAS,提到 Google Sheets 的部份簡稱 Sheets。
因為本篇主要是用 GAS 來讀寫 Sheets,所以原始碼這次就不存 GitHub 上,直接存在 GAS 上,在這邊先提供給大家:

概念:試算表 > 工作表

這邊先說明一個基本概念,我們一般會說「你那個 Excel 的檔案整理好後寄給我」,我們講 Excel 時腦子裡想到的會是 Excel === 試算表 === 工作表 === Google Sheets。
實際上看過官方文件後,就會理解到一個 Google Sheets 的檔案,就是「試算表」(Spreadsheet),而一個試算表裡我們會開有很多張表,那些表就是「工作表」(Sheet)。
看文件會看見命變數時,第一行常常會是:
var ss = SpreadsheetApp.getActiveSpreadsheet();
就是在命這整個試算表本身。

建立模擬資料

為了可以實際操作看效果,August 有建立了一個 Demo 用的試算表,裡面的資料都是用以前寫的這篇「如何用 Postman Mock Server 快速建立 API Server」建立的。
Demo 用的試算表內容如下:
裡面有二張工作表:測試表1、測試表2。

試算表好用函式

以下程式碼中的變數 s,都是指試算表本身:
const s = SpreadsheetApp.getActiveSpreadsheet();

取得試算表的 ID

文件:getId()
試算表的 ID 可以直接從網址上看到,也可以用函式取得。
function getId() {
  const id = s.getId();
  Logger.log(id)  
}
透過 GAS 的執行功能,會看到如下結果:
取得試算表的 ID getId

取得試算表的名稱

文件:getName()
取得試算表的檔案名稱。
function getName() {
  const name = s.getName();
  Logger.log(name)  
}
取得試算表的名稱 getName

取得所有工作表

文件:getSheets()
取得試算表下的所有工作表,取出來後要用迴圈再來取得工作表的資訊,範例中是用 getName() 來取得每張工作表的名稱。
function getSheets() {
  const sheets = s.getSheets();
  if (sheets.length > 1) {
    for(let ss of sheets) {
      Logger.log(ss.getName())
    }
  }
}
取得所有工作表 getSheets

新增工作表

新增的工作表,位置會插入在執行中的工作表之後。
比方我們目前在執行中的工作表是「測試表1」,那新增的工作表就會插在測試表1之後。
function insertSheet() {
  s.insertSheet('測試新增工作表');
}
執行後:
插入在執行中的工作表之後

刪除工作表

刪除指定的工作表,抓到工作表就可以刪除,範例示範的是刪除指定的工作表名稱。
function deleteSheet() {
  const sheet = s.getSheetByName('測試新增工作表');
  s.deleteSheet(sheet);
}
刪除工作表 deleteSheet

試算表加上客製選單

這個功能蠻有趣的,就是可以在 Sheets 的導覽列上加上我們想要的選項。
也可以設定點了我們新增的選項後要執行哪個 function。
function addMenu() {
  const menu = [];
  // name:項目名稱。functionName:點擊時執行哪個 function
  menu.push({ name: '新增工作表', functionName: 'insertSheet' });
  menu.push(null); // 分隔線
  menu.push({ name: '刪除工作表', functionName: 'deleteSheet' });
  s.addMenu("加上客製選單", menu);
}
// 試算表打開時執行
function onOpen() {
  addMenu();
}
打開試算表,執行完 addMenu 後就會看見導覽列上多了一個選項:
試算表加上客製選單,開啟試算表時執行

更新試算表的客製選單

這跟新增客製選單很像,要注意的是,如果原本就有加上客製選單,再用更新選單時,選單名稱相同會覆蓋,不同的才會新增
// 選單名稱相同會覆蓋原本 addMenu 時新增的
function updateMenu_update() {
  const menu = [];
  menu.push({name: '更新成只有新增工作表', functionName: 'insertSheet'});
  s.updateMenu('加上客製選單', menu);
}
// 選單名稱不同,就會新增一個客製按鈕
function updateMenu_create() {
  const menu = [];
  menu.push({name: '來啊再新增一個加入工作表', functionName: 'insertSheet'});
  menu.push(null); // 分隔線
  menu.push({name: '來啊再新增一個刪除工作表', functionName: 'deleteSheet'});
  s.updateMenu('加上客製選單2', menu);
}
因為一次實作了覆蓋跟新增,原本結果部份錄成影片的方式呈現,結果 YouTube 不給傳,最後還刪掉了影片,就算了,就請大家自行貼上程式碼後測試囉~

右下角彈出視窗

Toast 就是指出現在畫面上的一個小視窗,通常會有時間性,比方三秒或五秒後自動消失。
function toast() {
  s.toast("Let's Write - 這是一個 Toast 的內文部份。", "開啟一個 Toast");
}
Sheets 上的 Toast 長這樣:
右下角彈出視窗 toast

工作表好用函式

從名稱找工作表

範例中是抓出工作表,並且 Log 出該工作表是排序第幾。
function getSheetByName() {
  const sheet = s.getSheetByName('測試表1');
  if (sheet != null) {
    Logger.log(sheet.getIndex());
  }
}
從名稱找工作表 getSheetByName

取得工作表的名稱

範例中是先用 getSheets()[0] 取出第一張工作表,然抓再取出工作表名稱。
function getSheetName() {
  const sheet = s.getSheets()[0];
  Logger.log(sheet.getSheetName());
}
取得工作表的名稱 getSheetName

取得工作表的值

範例中提供了二種抓工作表所有值的方法:getSheetValues、getRange。
function 中給的參數都一樣:
  • startRow:第幾列開始
  • startColumn:第幾欄開始
  • numRows:共要抓幾列的值
  • numColumns:共要抓幾欄的值
下列範例程式碼寫:1, 1, 6, 2,意思就是從第 1 列、第 1 欄開始,抓 6 * 2 的資料。
function getSheetValues() {
  const sheet = s.getSheets()[0];
  // 方法 1:getSheetValues
  const values1 = sheet.getSheetValues(1, 1, 6, 2);
  Logger.log(values1);
  // 方法 2:getRange
  const range = sheet.getRange(1, 1, 6, 2);
  values2 = range.getValues();
  Logger.log(values2);
}
取得工作表的值 getSheetValues、getRange

清空工作表的值

文件:clear
這個就不示範了,因為一用會整張工作表的值都被清空。
function clear() {
  const first = s.getSheetByName('測試表1');
  first.clear();
}
預設的清除,除了資料外連原本設定的格式也會被清空,比方今天我們設定了條件式格式突顯出重複的值,一用了 clear,那設定的條件式格式也會被清掉,就變成每次都要重新設定。
Sheet 很貼心的給了參數來選擇 clear 是要清格式、清資料,還是二個都清。
formatOnly:清格式。
contentsOnly:清資料。
function clear() {
  const first = s.getSheetByName('測試表1');
  first.clear({ formatOnly: false, contentsOnly: true });
}
另外補充一個,條件式格式突顯重複值的公式為:
=countif($A:$A,$A1)>1

工作表最底部新增一列值

這個 function 好用,要塞資料到 Sheet,就寫一個迴圈不斷用 appendRow 就對了。
function appendRow() {
  const sheet = s.getSheets()[0];
  sheet.appendRow(['ID', '姓名', 'email', '電話']);
}
工作表最底部新增一列值 appendRow

取得最後有值的列是第幾列

文件:getLastRow()
比方我們的 Demo 共有 6 列資料,用 getLastRow 就會回傳 6。
function getLastRow() {
  const sheet = s.getSheets()[0];
  const lastRow = sheet.getLastRow();
  Logger.log(lastRow);
}
取得最後有值的列是第幾列 getLastRow

取得最後有值的欄是第幾欄

比方我們的 Demo 共有 4 列資料,用 getLastColumn 就會回傳 4。
function getLastColumn() {
  const sheet = s.getSheets()[0];
  const lastCol = sheet.getLastColumn();
  Logger.log(lastCol);
}
取得最後有值的欄是第幾欄 getLastColumn

結合應用,直接取整張工作表的值

這邊結合上面三個 function,可以不用手動輸入要抓幾列幾欄,就一次抓工作表裡的資料。
function getSheetVal() {
  const sheet = s.getSheets()[0];
  const lastRow = sheet.getLastRow();
  const lastColumn = sheet.getLastColumn();
  const values = sheet.getSheetValues(1, 1, lastRow, lastColumn);
  Logger.log(values);
}
結合應用,直接取整張工作表的值

原始碼

在放在 Google Apps Script 上,請自行點選檔案切換觀看:
9會員
19內容數
沙龍到底是…做什麼用的勒?
留言0
查看全部
發表第一個留言支持創作者!
Let's Write 的沙龍 的其他內容
探索如何在 VS Code 中養一隻療癒的小寵物。本文將指導你安裝和使用 vscode-pets 擴充功能,讓可愛的寵物陪伴你一同寫程式。你可以選擇不同類型和顏色的寵物,甚至改變它們的遊玩場景,為你的編程時光增添樂趣和舒適。
2023 年 3 月第 3 週:OpenAI GPT-4 降臨。微軟推出 Microsoft 365 Copilot,Office AI 助手。FBI 首長:中國可透過 TikTok 控制數據 影響對台論述。IG 業配行情及技巧。
這篇文章教你如何使用 DOM to Image 進行網頁截圖。內容包括如何安裝和使用 DOM to Image,注意事項,以及一個實用的 Demo 和原始碼。文章還探討了 Notion AI 生成的文章,並在最後提供了一個關於生成式 AI 影響的彩蛋。
這篇文章教你如何使用 heic2any.js 來轉換 HEIC 格式的圖片。內容包括 HEIC 格式的介紹、如何使用 heic2any.js、處理從 iPhone 上傳的 HEIC 格式圖片,以及處理 API 回應的 HEIC Base64 格式圖檔的方法。文章提供了實用的 Demo 和原始碼。
探索如何在 VS Code 中養一隻療癒的小寵物。本文將指導你安裝和使用 vscode-pets 擴充功能,讓可愛的寵物陪伴你一同寫程式。你可以選擇不同類型和顏色的寵物,甚至改變它們的遊玩場景,為你的編程時光增添樂趣和舒適。
2023 年 3 月第 3 週:OpenAI GPT-4 降臨。微軟推出 Microsoft 365 Copilot,Office AI 助手。FBI 首長:中國可透過 TikTok 控制數據 影響對台論述。IG 業配行情及技巧。
這篇文章教你如何使用 DOM to Image 進行網頁截圖。內容包括如何安裝和使用 DOM to Image,注意事項,以及一個實用的 Demo 和原始碼。文章還探討了 Notion AI 生成的文章,並在最後提供了一個關於生成式 AI 影響的彩蛋。
這篇文章教你如何使用 heic2any.js 來轉換 HEIC 格式的圖片。內容包括 HEIC 格式的介紹、如何使用 heic2any.js、處理從 iPhone 上傳的 HEIC 格式圖片,以及處理 API 回應的 HEIC Base64 格式圖檔的方法。文章提供了實用的 Demo 和原始碼。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在E70的影片中,Meiko跟大家分享Excel版本的十字光標設定,收到很多同學的回饋,最近有同學提到,也想在Google Sheets上執行光標標註的功能,Meiko原以為蠻簡單的,後來實操之後發現並不容易,於是請教了AI,意外的設計出一個光標控制面板,我覺得很方便,分享給大家~
Thumbnail
在 Google Sheets 中,SPARKLINE 函數提供了一個方便的方法來創建迷你圖表,讓你可以輕鬆地視覺化數據。這些迷你圖表可以是折線圖、柱狀圖或其他類型,並且可以在單個儲存格中顯示。本教學將向你展示如何使用 SPARKLINE 函數來創建迷你圖表,讓你能夠快速而直觀地理解你的數據。
Thumbnail
在《有錢人想的和你不一樣》這本書裡面有很多對於金錢與人生觀上許多值得分享的部份。今天我想與大家分享書上提到: 有錢人很會管理他們的錢 vs 窮人很會搞丟他們的錢。 一般大部分的人在有了收入之後,會先用這些錢支付生活的必要支出,如果還有剩餘的才考慮進行儲蓄。有錢人則不這麼做,他們利用6大存錢~
Thumbnail
新的一年來臨,我期望重新檢視我的財務報表,讓自己更輕鬆的管理財務。我希望有一張預算編列表,然後利用這些表格來審視我的預算與到時候實際的收支狀況。我發現許多財務相關的apps都無法滿足我的需求。所以,我親手製作了一個包含預算和實際支出的表格,最後將這兩者合併成一個統一的表格。
Thumbnail
最近剛好分配一個需求,要批次更新一些基礎設定資料,而新系統基礎設定資料都統一由別的團隊維護在Google Sheet 上,一開始是要我寫 Laravel Seeder 塞資料表,後來發現也太多數據要批次更新了,數據要對到何時何年,乾脆來研究串 Google Sheet API 整批塞入在對總行數就好
Thumbnail
如何透過 Google Sheet (試算表) 與 Google Doc (文件) 自動化文件套版流程?不需要寫任何程式,就可以完成自動化文件套版流程的串接設定,之後也不用再手動一一複製貼上製作文件,只要輸入一筆或多筆 Google Sheet 資料,文件套版就交給 NoCode 自動化完成吧!
Thumbnail
GPT 連到 Google 試算表的時代終於來臨了,快來一起擁抱新科技!
Thumbnail
在公民科學中,以群眾標註或是問卷得來的表單資料,常會有評分的需要,而一般評分可能會有比較複雜的邏輯需求,可能會用幾行程式來處理最為容易。
Thumbnail
大綱: 1.用Google Sheet可以抓股息嗎?問題點是什麼? 2.為什麼可以用的來源網站少? 3.方式一 4.方法二 5.方式三 6.美化股息報表,增加額外資訊 7.製作即將要發股息的股票觀察表 8.練習題 用Google Sheet可以抓股息嗎?問題點是什麼? 為什麼可以用的來源網站少?
Thumbnail
副標題:投資機會口袋清單一把抓 大綱: 1.雲端股票觀察清單幾個特點 2.哪裡來的免費資料庫? 3.預設的篩選範本 4.放到google sheet上範例教學 5.建立手機桌面捷徑 6.總結步驟整理 7.範例表下載 雲端股票觀察清單幾個特點 哪裡來的免費資料庫? 上面有許多指標可以讓使用者來點選。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在E70的影片中,Meiko跟大家分享Excel版本的十字光標設定,收到很多同學的回饋,最近有同學提到,也想在Google Sheets上執行光標標註的功能,Meiko原以為蠻簡單的,後來實操之後發現並不容易,於是請教了AI,意外的設計出一個光標控制面板,我覺得很方便,分享給大家~
Thumbnail
在 Google Sheets 中,SPARKLINE 函數提供了一個方便的方法來創建迷你圖表,讓你可以輕鬆地視覺化數據。這些迷你圖表可以是折線圖、柱狀圖或其他類型,並且可以在單個儲存格中顯示。本教學將向你展示如何使用 SPARKLINE 函數來創建迷你圖表,讓你能夠快速而直觀地理解你的數據。
Thumbnail
在《有錢人想的和你不一樣》這本書裡面有很多對於金錢與人生觀上許多值得分享的部份。今天我想與大家分享書上提到: 有錢人很會管理他們的錢 vs 窮人很會搞丟他們的錢。 一般大部分的人在有了收入之後,會先用這些錢支付生活的必要支出,如果還有剩餘的才考慮進行儲蓄。有錢人則不這麼做,他們利用6大存錢~
Thumbnail
新的一年來臨,我期望重新檢視我的財務報表,讓自己更輕鬆的管理財務。我希望有一張預算編列表,然後利用這些表格來審視我的預算與到時候實際的收支狀況。我發現許多財務相關的apps都無法滿足我的需求。所以,我親手製作了一個包含預算和實際支出的表格,最後將這兩者合併成一個統一的表格。
Thumbnail
最近剛好分配一個需求,要批次更新一些基礎設定資料,而新系統基礎設定資料都統一由別的團隊維護在Google Sheet 上,一開始是要我寫 Laravel Seeder 塞資料表,後來發現也太多數據要批次更新了,數據要對到何時何年,乾脆來研究串 Google Sheet API 整批塞入在對總行數就好
Thumbnail
如何透過 Google Sheet (試算表) 與 Google Doc (文件) 自動化文件套版流程?不需要寫任何程式,就可以完成自動化文件套版流程的串接設定,之後也不用再手動一一複製貼上製作文件,只要輸入一筆或多筆 Google Sheet 資料,文件套版就交給 NoCode 自動化完成吧!
Thumbnail
GPT 連到 Google 試算表的時代終於來臨了,快來一起擁抱新科技!
Thumbnail
在公民科學中,以群眾標註或是問卷得來的表單資料,常會有評分的需要,而一般評分可能會有比較複雜的邏輯需求,可能會用幾行程式來處理最為容易。
Thumbnail
大綱: 1.用Google Sheet可以抓股息嗎?問題點是什麼? 2.為什麼可以用的來源網站少? 3.方式一 4.方法二 5.方式三 6.美化股息報表,增加額外資訊 7.製作即將要發股息的股票觀察表 8.練習題 用Google Sheet可以抓股息嗎?問題點是什麼? 為什麼可以用的來源網站少?
Thumbnail
副標題:投資機會口袋清單一把抓 大綱: 1.雲端股票觀察清單幾個特點 2.哪裡來的免費資料庫? 3.預設的篩選範本 4.放到google sheet上範例教學 5.建立手機桌面捷徑 6.總結步驟整理 7.範例表下載 雲端股票觀察清單幾個特點 哪裡來的免費資料庫? 上面有許多指標可以讓使用者來點選。