為了自動列出雲端硬碟上某個資料夾的使用者,問了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~~~