无需打开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里添加按钮并绑定函数
- 打开你的目标Google Sheet,点击顶部菜单栏的「插入」→「绘图」。
- 在绘图界面选择一个形状(比如矩形)画出按钮大小,点击「文本框」添加按钮文字(比如“同步Drive文件夹”),调整样式后点击「保存并关闭」,按钮会出现在表格里。
- 点击这个按钮,右上角会出现三个点的菜单,选择「指派脚本」。
- 在输入框里输入整合函数名:
syncDriveToSheets,点击「确定」即可。
第三步:第一次执行的权限授权
第一次点击按钮时会弹出权限请求,按照提示完成授权(需要允许脚本访问你的Google Drive和Google Sheets),授权后就能正常使用按钮执行同步操作了。
额外提示
如果你不想每次同步都清空表格数据,可以修改getFolderTree()里的sheet.clear('A1'),改成只清空特定范围,或者调整逻辑在现有数据后追加(不过同步最新文件夹结构时,清空重写通常更准确)。
如果确实需要同时执行listFolders()和listAll()且不覆盖数据,可以给getFolderTree()加参数,让它把结果写到不同的列或工作表里。
备注:内容来源于stack exchange,提问作者crumb
相关产品推荐
相关产品推荐

