You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需打开Google Apps Script界面,如何通过按钮执行脚本函数同步Drive文件夹名称到Google Sheets

无需打开Google Apps Script界面,如何通过按钮执行脚本函数同步Drive文件夹名称到Google Sheets

嗨,我完全懂你的需求——每次要同步Drive文件夹到Google Sheets都得打开Apps Script菜单太麻烦了,想直接在表格里点个按钮就搞定对吧?其实你之前想到的「写一个整合函数绑定到按钮」的思路完全正确,只是需要结合你的脚本特点调整一下,我来一步步帮你实现:

第一步:编写整合执行的入口函数

你的脚本里有listFolders()、listAll()和appendToColumn()三个核心函数,但要注意:listFolders()和listAll()都会调用getFolderTree(),而这个函数里有sheet.clear('A1')——也就是每次执行都会清空「Resources」表的A1开始的内容,所以如果同时执行这两个函数,后面的会覆盖前面的结果。

我帮你调整了脚本并添加了整合函数,你可以根据需求选择执行逻辑:

// 替换成你自己的Drive文件夹ID
var folderId = '你的文件夹ID';

function listFolders(){
  getFolderTree(folderId, false);
};

function listAll(){
  getFolderTree(folderId, true);
};

function getFolderTree(folderId, listAll) {
  try {
    var parentFolder = DriveApp.getFolderById(folderId);
    var file, data, sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resources");
    sheet.clear('A1');
    sheet.appendRow(["Name"]);
    getChildFolders(parentFolder.getName(), parentFolder, data, sheet, listAll);
  } catch (e) {
    Logger.log(e.toString());
  }
};

function getChildFolders(parentName, parent, data, sheet, listAll) {
  var childFolders = parent.getFolders();
  while (childFolders.hasNext()) {
    var childFolder = childFolders.next();
    data = [childFolder.getName()];
    sheet.appendRow(data);
    var files = childFolder.getFiles();
    // 修复逻辑运算符bug,避免不必要的执行问题
    while (listAll && files.hasNext()) {
      var childFile = files.next();
      data = [
        parentName + "/" + childFolder.getName() + "/" + childFile.getName(),
        childFile.getName()
      ];
      sheet.appendRow(data);
    }
    getChildFolders(parentName + "/" + childFolder.getName(), childFolder, data, sheet, listAll);
  }
};

function appendToColumn() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resources");
  var data = "End";
  var range = sheet.getRange("A1:A").getValues().flat();
  var row = range.filter(String).length;
  Logger.log(row);
  sheet.getRange(row+1,2).setValue(data);
}

// 这就是要绑定到按钮的整合函数
function syncDriveToSheets() {
  // 👇 根据你的需求选择执行逻辑,注释掉不需要的部分
  // 示例1:只同步文件夹列表 + 追加"End"标记
  listFolders();
  appendToColumn();

  // 示例2:同步文件夹+文件列表 + 追加"End"标记
  // listAll();
  // appendToColumn();
}

第二步:在Google Sheets里添加按钮并绑定函数

  1. 打开你的目标Google Sheet,点击顶部菜单栏的「插入」→「绘图」。
  2. 在绘图界面选择一个形状(比如矩形)画出按钮大小,点击「文本框」添加按钮文字(比如“同步Drive文件夹”),调整样式后点击「保存并关闭」,按钮会出现在表格里。
  3. 点击这个按钮,右上角会出现三个点的菜单,选择「指派脚本」。
  4. 在输入框里输入整合函数名:syncDriveToSheets,点击「确定」即可。

第三步:第一次执行的权限授权

第一次点击按钮时会弹出权限请求,按照提示完成授权(需要允许脚本访问你的Google Drive和Google Sheets),授权后就能正常使用按钮执行同步操作了。

额外提示

如果你不想每次同步都清空表格数据,可以修改getFolderTree()里的sheet.clear('A1'),改成只清空特定范围,或者调整逻辑在现有数据后追加(不过同步最新文件夹结构时,清空重写通常更准确)。
如果确实需要同时执行listFolders()和listAll()且不覆盖数据,可以给getFolderTree()加参数,让它把结果写到不同的列或工作表里。

备注:内容来源于stack exchange,提问作者crumb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:18:08