如果您打算使用custom function在Google Sheets中写入子文件夹名称列表,它将不起作用,因为您的功能在使用DriveApp时需要授权,它会抛出错误消息You do not have permission to call X service.,该服务需要用户授权,因此不能用于here 所述的自定义函数。
您可以使用Spreadsheet Service 在 Google 表格中写下您的子文件夹名称。但是您需要指定特定的工作表和要写入数据的单元格。
示例代码:
function findSubFolder(){
var childFolder = DriveApp.getFolderById('xxxxxxxx').getFolders();
var activeSheet = SpreadsheetApp.getActiveSheet();
var activeCell = activeSheet.getActiveCell();
var childNames = [];
while (childFolder.hasNext()) {
var child = childFolder.next();
Logger.log(child.getName());
childNames.push([child.getName()]);
}
activeSheet.getRange(activeCell.getRow(),activeCell.getColumn(),childNames.length,1).setValues(childNames);
}
它有什么作用?
- 使用SpreadsheetApp.getActiveSheet() 获取活动工作表,使用Sheet.getActiveCell() 获取活动单元格
- 获取所有子文件夹名称,并使用Array.prototype.push() 将其添加到
childNames 数组中
请注意,当我推送子名称时,我使用了 [sub-folder name],当我们想要使用 Range.setValues() 时需要它,它接受一个二维数组,其中我想要多行。
- 从活动单元格开始将
childNames 数组写入活动工作表。使用Sheet.getRange(row, column, numRows, numColumns) 和Range.setValues(values)
输出:
如果您想在单个单元格(在您的活动单元格中)写子文件夹名称,您可以替换
activeSheet.getRange(activeCell.getRow(),activeCell.getColumn(),childNames.length,1).setValues(childNames);
到
activeCell.setValue(childNames.flat().toString());
输出: