显示带有标签的帖子 建立档案. 显示所有帖子
显示带有标签的帖子 建立档案. 显示所有帖子

2014年7月28日,星期一

将文件或电子表格保存在GDrive的特定文件夹中

以下是一个快速代码段,可帮助您了解如何将电子表格保存到Google云端硬盘上的特定文件夹中。

为了在文件夹中创建文件,您需要在创建文件时找到父文件夹并将其传递给DriveApp。通常,文件路径的格式为“ /path/to/file/file.js”,因此在将文件保存到GDrive时保持相同的结构是有意义的。以下代码接受完整的文件路径,并在该文件夹中创建一个新文件。

下一个明显的问题是如何创建电子表格。不幸的是,您无法使用DriveApp创建它,而需要使用SpreadsheetApp。另外,由于电子表格应用程序无法在文件夹中创建文件,因此您需要创建电子表格,然后将其移动到正确的文件夹中。我通常使用类似的逻辑创建一个单独的函数以找到正确的文件夹,然后更新创建逻辑以使用SpreadsheetApp代替DriveApp。有关示例,请参见第二个功能。

谢谢,
拉斯

/******************************************
* Create File in a Specific Folder Path
* Version 1.0 
* Created By: 拉斯 Savage
* FreeAdWordsScripts.com
******************************************/
function 创造File(filePath) {
  var pathArray = filePath.trim().split('/');
  var folder;
  for(var i in pathArray) {
    var parentName = pathArray[i];
    if(!parentName || parentName === '') { continue; } // in the root folder
    // source: http://goo.gl/P0LQ86
    if(filePath.indexOf(parentName, filePath.length - parentName.length) !== -1) {
      // This is creating the actual file
      if(folder) {
        if(folder.getFilesByName(parentName).hasNext()) {
          Logger.log('Using existing file: '+parentName);
          return folder.getFilesByName(parentName).next();
        }
        return folder.createFile(parentName,'');
      } else {
        if(DriveApp.getRootFolder().getFilesByName(parentName).hasNext()) {
          Logger.log('Using existing file: '+parentName);
          return DriveApp.getRootFolder().getFilesByName(parentName).next();
        }
        return DriveApp.getRootFolder().createFile(parentName,'');
      }
    }
    if(!folder && !DriveApp.getRootFolder().getFoldersByName(parentName).hasNext()) {
      Logger.log('Creating folder: '+parentName);
      folder = DriveApp.getRootFolder().createFolder(parentName);
    } else if(folder && !folder.getFoldersByName(parentName).hasNext()) {
      Logger.log('Creating folder: '+parentName);
      folder = folder.createFolder(parentName);
    } else {
      Logger.log('Using existing folder: '+parentName);
      folder = (!folder) ? DriveApp.getRootFolder().getFoldersByName(parentName).next() 
                         : folder.getFoldersByName(parentName).next();
    }
  }
  // Should never get here
  throw "Invalid file path: "+filePath;
}
并创建电子表格:
/******************************************
* Create Spreadsheet in a Specific Folder Path
* Version 1.0 
* Created By: 拉斯 Savage
* FreeAdWordsScripts.com
******************************************/
function 创造Spreadsheet(filePath) {
  var pathArray = filePath.trim().split('/');
  var folder;
  for(var i in pathArray) {
    var parentName = pathArray[i];
    if(!parentName || parentName === '') { continue; } // in the root folder
    // source: http://goo.gl/P0LQ86
    if(filePath.indexOf(parentName, filePath.length - parentName.length) !== -1) {
      // This is creating the actual file
      if(folder) {
        if(folder.getFilesByName(parentName).hasNext()) {
          Logger.log('Using existing file: '+parentName);
          var file = folder.getFilesByName(parentName).next();
          return SpreadsheetApp.openById(file.getId());
        }
        // 创造s in folder
        var 电子表格 = SpreadsheetApp.create(parentName);
        var file = DriveApp.getRootFolder().getFilesByName(parentName).next();
        folder.addFile(file);
        DriveApp.getRootFolder().removeFile(file);
        return 电子表格;
      } else {
        if(DriveApp.getRootFolder().getFilesByName(parentName).hasNext()) {
          Logger.log('Using existing file: '+parentName);
          var file = DriveApp.getRootFolder().getFilesByName(parentName).next();
          return SpreadsheetApp.openById(file.getId());
        }
        // 创造s in root folder
        return SpreadsheetApp.create(parentName);
      }
    }
    if(!folder && !DriveApp.getRootFolder().getFoldersByName(parentName).hasNext()) {
      Logger.log('Creating folder: '+parentName);
      folder = DriveApp.getRootFolder().createFolder(parentName);
    } else if(folder && !folder.getFoldersByName(parentName).hasNext()) {
      Logger.log('Creating folder: '+parentName);
      folder = folder.createFolder(parentName);
    } else {
      Logger.log('Using existing folder: '+parentName);
      folder = (!folder) ? DriveApp.getRootFolder().getFoldersByName(parentName).next() 
                         : folder.getFoldersByName(parentName).next();
    }
  }
  // Should never get here
  throw "Invalid file path: "+filePath;
}