如何避免在Google云端硬盘中创建重复的文件夹

时间:2017-06-17 17:48:12

标签: google-sheets

function saveAsCSV() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  // create a folder from the name of the spreadsheet
  var folder = DriveApp.createFolder(ss.getName().toLowerCase().replace(/ /g,'_') + '_csv');
  for (var i = 0 ; i < sheets.length ; i++) {
    var sheet = sheets[i];
    // append ".csv" extension to the sheet name
    fileName = sheet.getName() + ".csv";
    // convert all available sheet data to csv format
    var csvFile = convertRangeToCsvFile_(fileName, sheet);
    // create a file in the Docs List with the given name and the csv data
    folder.createFile(fileName, csvFile);
  }
}

此代码通过使用电子表格的名称创建一个包含&#39; CSV&#39;的电子表格来创建CSV文件。添加到它。我一直无法阻止它每次创建一个新文件夹,因为我希望每次都将csv文件放在这个特定的文件夹中来更新数据。我知道我需要查看该文件夹是否存在,如果没有,请先创建它,否则只需将csv文件放在现有文件夹(或已创建的文件夹)中。这听起来很简单,但我无法做到。

2 个答案:

答案 0 :(得分:1)

您可以创建一个帮助函数来检查文件夹是否存在。如果它存在,该函数可以返回该文件夹,如果不存在,则可以创建该文件夹。在这两种情况下,它都将返回一个文件夹对象。

function yourFunction() {
/*
some code
....
*/
//Get the folder by calling the helper function. 
var folder = getFolder("nameOfFolder");
//Create a file in the folder
folder.createFile("fileName", csvFile)
/*
some more code
....
*/
}

//Returns the folder or creates it if it doesn't exist. 
function getFolder(folderName) {
var f = DriveApp.getFoldersByName(folderName);
return f.hasNext() ? f.next() : DriveApp.createFolder(folderName);
}

答案 1 :(得分:0)

使用try{} catch(e){}测试下面的功能,以查找或创建文件夹。

注意:此功能会检查驱动器上的每个文件夹,因此如果您有大量文件夹,则可能需要将其修改为仅在文件夹中检查。

function testFolder(folderName){ 
var exist = false;
for(var i in targetFolders){
  var parentFolder = DriveApp.getFolderById(targetFolders[i]);
  var childFolders = parentFolder.getFolders();
  while(childFolders.hasNext()) {
    var child = childFolders.next();
    Logger.log('listFolders ' + child.getName());
    if(child.getName() == folderName){
    exist=true; 
    break;
  }
 }
}
return exist;
}