Google Apps脚本中的文件夹结构问题

发布于 2025-02-12 08:26:29 字数 1245 浏览 0 评论 0原文

我有一个在文件夹中创建文件的脚本(该文件夹是从单元格值命名的,该文件具有静态名称)。我希望的是一个将创建父值的脚本(在这种情况下,从单元格的2021年开始),然后在该脚本下一个子文件夹(在这种情况下,在这种情况下是设置的Emplyee类型,而不是来自单元格例如。

我真正挣扎的是要获得我想要的文件夹结构 - 最终看起来像这样:

“年”(来自单元格值) - > “员工类型”(静态值) - > “员工名称”(来自单元格值) - > “ index.html”(静态值)

具有以下代码,我的结构的最后两个部分工作,但无法获得“年”或“员工类型”文件夹。

我当前的代码在下面,但我似乎无法弄清楚如何将上面的2个文件夹添加到此脚本中。

function driverPages() {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getActiveSheet();
  var rg = sh.getRange(2, 17, sh.getLastRow(), 2);
  var vs = rg.getValues().filter(r => r.every(Boolean));
  vs.forEach(r => DriveApp.getFolderById(deletedriverPages('1Xsl2r_RPgqQ1i8K3aF23hov82JmNFySu',r[0], '2020')).createFile('index.html', r[1]));
}
function deletedriverPages(parentId, name) {
  var parent = DriveApp.getFolderById(parentId);
  var id;
  var folders = parent.getFoldersByName(name);
  if (folders.hasNext()) {
    var folder = folders.next();
    id = folder.getId();
    var files = folder.getFiles();
    while (files.hasNext()) {
      var file = files.next();
      if (file.getName() == 'index.html') { file.setTrashed(true) }
    }
  }
  else {
    var folder = parent.createFolder(name);
    id = folder.getId();
  }
  return id;
}

I have a script which creates a file in a folder (the folder is named from a cell value, the file has a static name). What I'm hoping for is a script that will create a parent value (in this case a year from a cell eg. 2021) and then a sub folder under that (in this case an emplyee type which is set and NOT from a cell eg. Driver).

What I am really struggling with is getting the folder structure I want - which would ultimately look like this:

"Year" (from cell value) --> "Employee Type" (static value)--> "Employee Name" (from cell values) --> "index.html" (static value)

With the below code, I have the last two parts of the structure working but cannot get "Year" or "Employee Type" folders.

My current code is below but I cannot seem to figure out how to add the 2 folders above to this script.

function driverPages() {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getActiveSheet();
  var rg = sh.getRange(2, 17, sh.getLastRow(), 2);
  var vs = rg.getValues().filter(r => r.every(Boolean));
  vs.forEach(r => DriveApp.getFolderById(deletedriverPages('1Xsl2r_RPgqQ1i8K3aF23hov82JmNFySu',r[0], '2020')).createFile('index.html', r[1]));
}
function deletedriverPages(parentId, name) {
  var parent = DriveApp.getFolderById(parentId);
  var id;
  var folders = parent.getFoldersByName(name);
  if (folders.hasNext()) {
    var folder = folders.next();
    id = folder.getId();
    var files = folder.getFiles();
    while (files.hasNext()) {
      var file = files.next();
      if (file.getName() == 'index.html') { file.setTrashed(true) }
    }
  }
  else {
    var folder = parent.createFolder(name);
    id = folder.getId();
  }
  return id;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逆蝶 2025-02-19 08:26:29

您可以尝试执行递归函数来遍历文件夹层次结构,并在此过程中创建任何缺少的文件夹。这是一个示例(未测试):

function driverPages() {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getActiveSheet();
  var rg = sh.getRange(2, 17, sh.getLastRow(), 2);
  var vs = rg.getValues().filter(r => r.every(Boolean));
  vs.forEach(r => DriveApp.getFolderById(deletedriverPages('1Xsl2r_RPgqQ1i8K3aF23hov82JmNFySu' [r[0], 'Employee Type', '2020'])).createFile('index.html', r[1]));
}

function deletedriverPages(parent, folderNames) {
  //if parent is a string, it is assumed to be a folder ID
  if(typeof parent === "string") {
    return deletedriverPages(DriveApp.getFolderById(parent), folderNames);
  //while there are more folder names in the array, keep processing and then recursively call the function
  } else if(folderNames.length > 0) {
    let name = folderNames.pop();
    let folders = parent.getFoldersByName(name);
    //if the folder exists, get it - otherwise create it
    let folder = folders.hasNext() ?  folders.next() : parent.createFolder(name);
    return deletedriverPages(folder, folderNames);
  //when the array is empty, delete index files if they exist
  } else {
    var files = parent.getFiles();
    while (files.hasNext()) {
      var file = files.next();
      if (file.getName() === 'index.html') { file.setTrashed(true) }
    }
    return parent.getId();
  }
}

You could try doing a recursive function to traverse the folder hierarchy and create any missing folders along the way. Here is an example (not tested):

function driverPages() {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getActiveSheet();
  var rg = sh.getRange(2, 17, sh.getLastRow(), 2);
  var vs = rg.getValues().filter(r => r.every(Boolean));
  vs.forEach(r => DriveApp.getFolderById(deletedriverPages('1Xsl2r_RPgqQ1i8K3aF23hov82JmNFySu' [r[0], 'Employee Type', '2020'])).createFile('index.html', r[1]));
}

function deletedriverPages(parent, folderNames) {
  //if parent is a string, it is assumed to be a folder ID
  if(typeof parent === "string") {
    return deletedriverPages(DriveApp.getFolderById(parent), folderNames);
  //while there are more folder names in the array, keep processing and then recursively call the function
  } else if(folderNames.length > 0) {
    let name = folderNames.pop();
    let folders = parent.getFoldersByName(name);
    //if the folder exists, get it - otherwise create it
    let folder = folders.hasNext() ?  folders.next() : parent.createFolder(name);
    return deletedriverPages(folder, folderNames);
  //when the array is empty, delete index files if they exist
  } else {
    var files = parent.getFiles();
    while (files.hasNext()) {
      var file = files.next();
      if (file.getName() === 'index.html') { file.setTrashed(true) }
    }
    return parent.getId();
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文