【问题标题】:Create folder from Google Sheet then retrieve the corresponding folderId and dateCreated() using google scripts从 Google Sheet 创建文件夹,然后使用 google 脚本检索相应的 folderId 和 dateCreated()
【发布时间】:2019-01-15 21:58:46
【问题描述】:

我需要帮助...看起来很简单,但我被困住了。我找到了这段代码并对其进行了一些更改以从 google 表格创建一个文件夹,然后我想检索相应的 folderId 和 dateCreated。我能够创建测试文件夹,但它没有遍历行并且没有打印 folderId 和 dateCreated 值。我正在测试要在 Google Drive 中创建的两个新文件夹。

我的电子表格包含以下内容:

(A) New Parent Folder
(A2) New folder1
(A3) New folder2
(B) Folder Id - print the parent folderId
(B2) Print New folder1 folderId
(B3) Print New folder2 folderId
(C) Date Created - print the creation date
(C2) Print New folder1 dateCreated
(C3) Print New folder2 dateCreated
(D) Root Folder
(D2) Root Folder URL

// 制作文件夹

function create(){
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('Make Folders');  
  var project = sheet.getRange(2,1,sheet.getLastRow()).getValues();
  var lastColumn = 4;

  var projectName = project[0][0];
  var parentId = project [0][1];
  var date = project [0][2];
  var rootFolder = project [0][3]; 

  for (i=0; i<projectName.length ; i++){
  if (projectName == '') {
    return false;
  } else {
      var rootURL = sheet.getRange('D2').getValue();
      var newFolder = DriveApp.getFolderById(rootURL).createFolder(projectName);
      var name = newFolder.getName(); // substring(7);
      var file = DriveApp.getFileById('XXXX').makeCopy(newFolder);
    }
  sheet.getRange(2,2).setValue(newFolder.getId());
  sheet.getRange(2,3).setValue(newFolder.getDateCreated());
}
}

脚本仅循环通过 A2 并不断创建相同的文件夹。也许我的循环不正确......我希望代码能够通过 ColumnA 运行(如果有新数据)并将 folderId 和创建日期打印到谷歌表中。

TIA 为您提供帮助。


我已经更新了我的代码,但是我创建的第一个文件夹没有提取和发布第一个文件夹信息,但它确实用于第二个文件夹。我该如何解决?我错过了什么吗?

   function createFolders(){
      var ss= SpreadsheetApp.openById("XXX")
      var sheet = ss.getSheetByName('Make Folders');
      var project = sheet.getRange(2,2,sheet.getLastRow(),sheet.getLastColumn()).getValues(); //data

      for (i=0; i<project.length-1; i++){
        var root = project [i][0];
        var folderName = project[i][1];
        var id = project[i][2];
        var datec = project[i][3];

         var rootid = ss.getRange('A2').getValue();  //user enters the root folder id
         var newFolder = DriveApp.getFolderById(rootid).createFolder(project[i][0]);
      }
      sheet.getRange(i+1,3,1,2).setValues([ [newFolder.getId(), newFolder.getDateCreated()] ]);                        
    }

【问题讨论】:

  • 您的循环确实不正确。您将需要使用迭代器i 和您的工作表数据project。查看有关 JavaScript 循环的教程。
  • 关于您最近的编辑,您仍然有一些需要删除的遗留逻辑(rootid vs root),并且您的 write 语句使用迭代器,但在循环之外。虽然最好在循环外进行写入(批处理操作),但您必须创建在循环内写入的对象(每个内存中的数据行)。查看应用脚本“最佳实践”页面,了解一些对您有帮助的示例。

标签: javascript for-loop google-apps-script google-sheets


【解决方案1】:

我能够创建测试文件夹,但它没有循环遍历行,也没有打印 folderId 和 dateCreated 值。

您应该花一些时间了解在 JavaScrip 上循环二维数组,因为您的脚本使用 getValues() 并且它返回一个二维数组。同时代替

for (i=0; i<projectName.length ; i++){

试试

for (i=0; i<project.length - 1 ; i++){

而不是

var newFolder = DriveApp.getFolderById(rootURL).createFolder(projectName);

试试

var newFolder = DriveApp.getFolderById(rootURL).createFolder(project[i][0]);

【讨论】:

  • 这是 OP 的 一个 问题...最大的是 i 甚至没有被使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 2023-01-22
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多