问题描述
这是代码,它可以工作,但我无法将它们放入 Google 表格中。
enter image description here 在记录器的位置,我需要替换谷歌表。请帮我解决这个问题?
解决方法
如果您打算使用 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(),1).setValues(childNames);
到
activeCell.setValue(childNames.flat().toString());