如何使用应用程序脚本谷歌驱动器从谷歌表中的父文件夹中列出所有子文件夹名称

问题描述

如何将谷歌驱动器中的所有子文件名称列出到谷歌表格中?

这是代码,它可以工作,但我无法将它们放入 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);
}

它有什么作用?

  1. 使用 SpreadsheetApp.getActiveSheet() 获取活动工作表,使用 Sheet.getActiveCell() 获取活动单元格
  2. 获取所有子文件夹名称并使用 Array.prototype.push()
  3. 将其添加到 childNames 数组中

请注意,当我推送使用 [sub-folder name] 的子名称时,当我们想要使用 Range.setValues() 时需要它,它接受我想要多行的二维数组。

  1. 从活动单元格开始将 childNames 数组写入活动工作表。使用 Sheet.getRange(row,column,numRows,numColumns)Range.setValues(values)

输出:

enter image description here


如果您想在单个单元格(在您的活动单元格中)写入子文件夹名称,您可以替换

activeSheet.getRange(activeCell.getRow(),1).setValues(childNames);

activeCell.setValue(childNames.flat().toString());

输出:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...