在Google云端硬盘上使用Apps脚本,使用单元格值作为硬盘名称来创建(团队)共享硬盘

时间:2019-12-18 13:15:24

标签: google-apps-script google-drive-api

我想使用单元格值作为驱动器名称来创建多个共享驱动器。

我可以获取范围的值,但是我不知道如何捕获数组数组中的每个值。我需要获取那些单元格值来设置驱动器名称。

这是我的代码:

function createDriveID(){

var department = SpreadsheetApp.getActiveSheet().getRange(1,1,SpreadsheetApp.getActiveSheet().getRange("A1").getDataRegion().getLastRow(),1).getValues();
var lastname = SpreadsheetApp.getActiveSheet().getRange(2,2,SpreadsheetApp.getActiveSheet().getRange("B2").getDataRegion().getLastRow(),1).getValues();
var firstname = SpreadsheetApp.getActiveSheet().getRange(3,3,SpreadsheetApp.getActiveSheet().getRange("C3").getDataRegion().getLastRow(),1).getValues();

for (var i=0; i<department.length; i++ ) {
var dep = department[i].toString();
var dept = dep.substring(0,3).toUpperCase();
 //Logger.log(dept);


}

for (var x=0; x<lastname.length; x++) {
//var stri = lastname[x].toString();
var lname = lastname[x].toString();
// Logger.log(lname);

}

for (var y=0; y<firstname.length; y++) {
//var string = firstname[y].toString();
var fname = firstname[y].toString();
//  Logger.log(fname);

}

//var dept = SpreadsheetApp.getActiveSheet().getRange(37,1,SpreadsheetApp.getActiveSheet().getRange("A37").getDataRegion().getLastRow(),1).setValues(department);
//Generate Drive ID

var newDrive = Drive.newTeamDrive();
var capabilities = Drive.newTeamDriveCapabilities();
capabilities.canAddChildren = true;
capabilities.canDownload = true;
capabilities.canEdit = true;
capabilities.canDeleteDrive = true;
capabilities.canManageMembers = true;
capabilities.canShare = true;

newDrive.capabilities = capabilities;
newDrive.name = 'CCW' + dept + '-' + fname + " " + lname;
var createdDrive = Drive.Drives.insert(newDrive, 'BCK' + Math.random());

//Add Managers on Drive  
var permission = Drive.newPermission();
permission.type = 'group';   //Type can be user, domain, group etc.. check role and type section at https://developers.google.com/drive/api/v2/reference/permissions/insert
permission.role = 'fileOrganizer';
permission.value = "xxxx@email.com";  //It can be email or domain or group name based on type 
Drive.Permissions.insert(permission, createdDrive.id, {
sendNotificationEmails:false,  //Make it true to send notification 
supportsTeamDrives:true,
useDomainAdminAccess:false
}); 

//---------------------Copying of Folders--------------------------------------
var sourcefolder = DriveApp.getFolderById('1O1JSpx0-luxVW31b9Kmz4AYHwJe1dC77');
var destfolder = DriveApp.getFolderById(createdDrive.id);
copyCustomFiles(sourcefolder, destfolder);
//---------------------Copying END----------------------------------

//Add User to Drive

var resource = {
'value': 'xxxx@email.com',
'type': 'group',
'role': 'organizer'
}
Drive.Permissions.insert(resource, createdDrive.id, {"supportsTeamDrives": true});

//End of Generate Drive ID 
Logger.log(createdDrive.id);
SpreadsheetApp.getActiveSheet().getRange(37,1,SpreadsheetApp.getActiveSheet().getRange("A37").getDataRegion().getLastRow(),1).setValues(createdDrive.id);
}

此外,我想将所有驱动器ID插入活动工作表中。

预期输出为:

Output

MUR是部门,然后是“姓氏”和“名字”。这些详细信息必须来自单元格值。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议您通过添加一个for循环来修改代码,在该循环中,您的其余代码将嵌套在其中,并循环访问值数组的数组元素。

示例:

function createDriveID(){
var sheet=SpreadsheetApp.getActiveSheet();
var department = sheet.getRange(1,1,SpreadsheetApp.getActiveSheet().getRange("A1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(),1).getValues();
var lastname = sheet.getRange(1,2,SpreadsheetApp.getActiveSheet().getRange("B1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(),1).getValues();
var firstname = sheet.getRange(1,3,SpreadsheetApp.getActiveSheet().getRange("C1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(),1).getValues();

for (var i=0; i<department.length; i++ ) {
  var dep = department[i][0].toString();
  var dept = dep.substring(0,3).toUpperCase();
  var lname = lastname[i][0].toString();
  var fname = firstname[i][0].toString();

  var newDrive = Drive.newTeamDrive();
  var capabilities = Drive.newTeamDriveCapabilities();
  capabilities.canAddChildren = true;
  capabilities.canDownload = true;
  capabilities.canEdit = true;
  capabilities.canDeleteDrive = true;
  capabilities.canManageMembers = true;
  capabilities.canShare = true;
  newDrive.capabilities = capabilities;
  newDrive.name = 'CCW' + dept + '-' + fname + " " + lname;
  var createdDrive = Drive.Drives.insert(newDrive, 'BCK' + Math.random());
  ...
  sheet.getRange(sheet.getLastRow()+1,1).setValue(createdDrive.id);
  }
}
  
      
  • 请注意,用.getValues()检索的单元格内容存储在二维数组中。因此,要使用这些值,您需要指定   两种尺寸,例如var dep = department[i][0]
  •   
  • 假设部门,姓氏和名字的条目数相等,并且对应于要创建的驱动器数-   单个for循环足以遍历所有数组   同时。
  •   
  • 考虑到姓名和部门之间的相关性,请参阅我对您的问题的评论。
  •