2024/2/17

第一次用Gemini 1.5寫Google Apps Script以進行Google 試算表的自動化

 

為了自動列出雲端硬碟上某個資料夾的使用者,問了ChatGPT一個問題:

我有一個google試算表。試算表的B1儲存格存放的資料是一個google雲端硬碟上的資料夾的連結,例如:
https://drive.google.com/drive/u/0/folders/XXXXXXXXXXXXXXXXXXXX
我需要一個script來完成以下工作:

1. 先清除B2:B100的資料。
2. 在B2顯示資料夾名稱。
3. 在B3顯示資料夾所有者。
4. 在B4、B5、B6...列出資料夾編輯者。
5. 列完編輯者之後,接著再列出檢視者。
 

ChatGPT給的程式碼執行後一直出現錯誤,無法順利執行,再三反饋給ChatGPT,多次修改後仍無效,放棄。

想到Google幾天前啟用的Gemini 1.5,以下是Gemini的答案與修改過程:

好的,以下是一個可以完成您需求的 Google Apps Script:

```
function getFolderInfo() {
  // 清除 B2:B100 的資料
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange('B2:B100').clearValues();

  // 取得資料夾 ID
  var folderId = sheet.getRange('B1').getValue().match(/folders\/(.*)/)[1];

  // 取得資料夾資訊
  var folder = DriveApp.getFolderById(folderId);

  // 顯示資料夾名稱
  sheet.getRange('B2').setValue(folder.getName());

  // 顯示資料夾所有者
  sheet.getRange('B3').setValue(folder.getOwner().getEmail());

  // 顯示資料夾編輯者
  var editors = folder.getEditors();
  for (var i = 0; i < editors.length; i++) {
    sheet.getRange('B' + (4 + i)).setValue(editors[i].getEmail());
  }

  // 顯示資料夾檢視者
  var viewers = folder.getViewers();
  for (var i = 0; i < viewers.length; i++) {
    sheet.getRange('B' + (4 + editors.length + i)).setValue(viewers[i].getEmail());
  }
}
```

這個 Script 的執行方式如下:

1. 在 Google 試算表中,開啟 Script 編輯器。
2. 將上述程式碼貼到 Script 編輯器中。
3. 儲存 Script。
4. 在 Script 編輯器中,點選執行按鈕。

執行 Script 後,試算表中的 B2:B100 儲存格就會顯示出您指定的資料夾的相關資訊。

以下是 Script 的詳細說明:

* `getFolderInfo()` 函式是 Script 的入口點。
* `sheet.getRange('B2:B100').clearValues()` 這一行用於清除 B2:B100 儲存格中的資料。
* `var folderId = sheet.getRange('B1').getValue().match(/folders\/(.*)/)[1]` 這一行用於取得資料夾 ID。
* `var folder = DriveApp.getFolderById(folderId)` 這一行用於取得資料夾物件。
* `sheet.getRange('B2').setValue(folder.getName())` 這一行用於顯示資料夾名稱。
* `sheet.getRange('B3').setValue(folder.getOwner().getEmail())` 這一行用於顯示資料夾所有者。
* `var editors = folder.getEditors()` 這一行用於取得資料夾編輯者陣列。
* `for (var i = 0; i < editors.length; i++) { sheet.getRange('B' + (4 + i)).setValue(editors[i].getEmail()) }` 這一行用於顯示資料夾編輯者。
* `var viewers = folder.getViewers()` 這一行用於取得資料夾檢視者陣列。
* `for (var i = 0; i < viewers.length; i++) { sheet.getRange('B' + (4 + editors.length + i)).setValue(viewers[i].getEmail()) }` 這一行用於顯示資料夾檢視者。

希望這個 Script 能夠滿足您的需求。

我:執行後出現錯誤訊息:TypeError: sheet.getRange(...).clearValues is not a function

Gemini:

出現這個錯誤訊息的原因是,您使用的 Google Apps Script 版本太舊了。在舊版本的 Google Apps Script 中,`sheet.getRange()` 方法沒有 `clearValues()` 函式。

要解決這個問題,您需要將 Google Apps Script 版本更新到最新版本。更新方法如下:

1. 在 Google 試算表中,開啟 Script 編輯器。
2. 點選 **資源** > **管理 Script 版本**。
3. 在 **版本** 對話方塊中,點選 **更新**。

更新 Google Apps Script 版本後,您應該就可以正常執行 Script 了。

如果您不想更新 Google Apps Script 版本,也可以使用以下方法來清除 B2:B100 儲存格中的資料:

```
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange('B2:B100');
range.clearContent();
```

`clearContent()` 方法的效果與 `clearValues()` 方法相同,但它適用於所有版本的 Google Apps Script。

採用Gemini提供的第二個方案,修改程式碼之後就能順利執行了,不虧是自家產品,對自家的試算表有較好的支援。

相較於GhatGPT,Gemini第二次回覆就成功了,而且每段程式碼還一一解釋,非常適合學習電腦語言,超棒der~~~

 

沒有留言:

張貼留言