1

需要帮助,我希望根据电子表格中提到的信息在我的谷歌驱动器中创建批量文件夹。电子表格的标题为“A”列作为名称,“B”列作为描述,“C”列作为父文件夹名称,“D”列作为其根或编号。

运行脚本后,它会做两件事。1:给出“异常:参数不能为空:描述”的错误 2:它只创建一个文件夹,并且名称仅作为第一个字母。例如,“A”列中的第 2 行名称为“abcd”,“A”列中的第 3 行名称为“XYZ”。这些脚本仅从第 2 行创建一个名为“A”而不是 abcd 的文件夹。

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('GDrive')
  .addItem('Create new Folders', 'crtGdriveFolder')
  .addToUi();
}

function crtGdriveFolder() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var numRows = sheet.getLastRow();
  var maxRows = Math.min(numRows,20);
  var folderid = sheet.getRange("C2").getValue();
  var root = sheet.getRange("D2").getValue();
  var dataRange = sheet.getRange(startRow, 1, maxRows, 2);
  var data = dataRange.getValue();
  var folderIterator = DriveApp.getFoldersByName(folderid);

  if(!folderIterator.hasNext()) {
    SpreadsheetApp.getActiveSpreadsheet().toast('Folder not Found!');
    return;
  }

  var parentFolder = folderIterator.next();

  if(folderIterator.hasNext()) {
    SpreadsheetApp.getActiveSpreadsheet().toast('Folder has a non-unique name!');
    return;
  }

  for (i in data) {
    var row = data[i];
    var name = row[0];
    var desc = row[1];



  if(root == "N" && name != "") {
      var idNewFolder = parentFolder.createFolder(name).setDescription(desc).getId();
      ////Utilities.sleep(100);
      var newFolder = DriveApp.getFolderById(idNewFolder);

      } if(root == "Y" && name != "") {
        var idNewFolder = DriveApp.createFolder(name).setDescription(desc).getId();
        Utilities.sleep(100);
        var newFolder = DriveApp.getFolderById(idNewFolder);
      }
  }
}
4

2 回答 2

1

尝试 var data = dataRange.getValues();(getValueS, 复数,所以最后有一个 S) 而不是 getValue (single)

而你使用 var maxRows = Math.min(numRows,20);. 有时您的范围内的数据是否可能少于 20 行?如果是这样,它将找到空白行。

于 2020-05-25T07:56:39.097 回答
1

正如米歇尔在评论中提到的那样,只需更改var data = dataRange.getValue();var data = dataRange.getValues();它应该可以工作。目前它只获取单个单元格的值而不是范围。这就是为什么当您尝试使用var name = row[0];它获取名称时仅返回该单元格值的单个字符。不, var maxRows = Math.min(numRows,20);即使少于 20 行也不会引起问题。

于 2020-05-25T08:35:14.227 回答