2017-12-13 1 views
1

스프레드 시트의 데이터에서 Google 드라이브의 새 폴더 만들기를 자동화하려고합니다. 스프레드 시트는 양식에서 정보를 가져옵니다. 스크립트를 사용하여 새 폴더를 만드는 방법을 알아 냈지만 다음과 같은 질문이 있습니다.새 폴더를 만들고 새 폴더에 새 이름으로 Google 시트 복사

  1. 스크립트를 실행할 때마다 중복 폴더가 생성되는 것을 방지하려면 어떻게합니까? 예를 들어, '1808'이라는 폴더가 이미 생성 된 경우 스크립트에서 '1808 (1)'을 만들지 않으려합니다.
  2. 다른 위치에서 스프레드 시트를 복사하고 새 폴더에 삽입하려고합니다. 만들고있어. 새 파일 이름은 동일한 스프레드 시트의 정보로 작성됩니다.

    function makeFolders(){ 
    
    //Get array of folder names (fixed & variable) 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var bottomRow = sheet.getMaxRows()-2; 
    var folderNames = sheet.getRange(2, 12, bottomRow, 1).getValues(); 
    
    //If fixed name cell is blank it throws up an alert and stops  
    if (folderNames === "") { 
        SpreadsheetApp.getUi().alert('Cell A3 is blank.'); 
    } 
    
    //If folder ID cell is blank it throws up an alert and stops 
    var folderUrl = sheet.getRange(3,14).getValue(); 
    if (folderUrl === "") { 
        SpreadsheetApp.getUi().alert('Cell C3 is blank.'); 
    }  
    
    //If fixed name cell and file URL aren't empty, run the program 
    if (folderNames !== "" && folderUrl !== "") {  
        //Get ID from folder URL 
        var folderId = folderUrl.match(/[-\w]{25,}/);  
        //Get master folder 
        var getRootFolderId = DriveApp.getFolderById(folderId); 
    
        //Copy master n times and rename each copy with the new name 
        //stops when it comes to a blank cell 
        for (n=0;n<bottomRow;n++){ 
          if(folderNames[n] == ""){break;} 
    
          var newFolder = getRootFolderId.createFolder(folderNames[n]); 
        } 
        ss.toast("Your folders have been made! :)","Finished",3); 
    } 
    }**strong text** 
    
+0

스크립트에 대해 더 자세히 배우면서 onopen을 사용하는 대신 onedit을 사용하여 폴더를 만들 수 있습니다. –

답변

0

는 어떻게 스크립트가 실행될 때마다 중복 폴더를 만들지 않도록합니까? '1808'라는 이름의 폴더가 이미 생성 된 경우 예를 들어 , 나는 스크립트가 생성하지 않으려는 '1808 (1)'당신은 모든 폴더 이름과 루프의 목록을 얻을 수

새 폴더 이름과 일치하는 항목이 있는지 확인하십시오! 같은 뭔가 :

function MakeNewFolders(rootFolderID, folderNames) 
    // Get master folder 
    var rootFolder = DriveApp get folder (rootFolderID) 
    var subfolders = rootFolder.getFolders() 
    var alreadyExists = false; 
    var newFolder; 

    // Check if any subfolder already exists 
    // loop for folders first, to minimize GAS function calls 
    while (subfolders.hasNext()) { 
     var subfolderName = subfolders.next().getName(); 
     loop (each folder in folderNames) { 
      if (subfolderName == newFolderName) 
       alreadyExists = true; 
     } 
     if (!alreadyExists) 
      newFolder = rootFolder.createFolder(newFolderName) 
    } 

당신이 (60 틱), here is a code snippet you might find handy을 통해 루프 필요 폴더의 톤이있는 경우. 기본적으로 서브 폴더 목록을 가져 오는 the original Google examplefolder.hasNext()을 확인하여 필요한만큼 두 번 느리게 실행됩니다. try-catch 블록을 사용하고 "끝이났습니다!"라는 메시지는 무시해도됩니다. 예외가 throw됩니다. 실행 시간을 반으로 줄여야합니다! :)

다른 위치에서 스프레드 시트를 복사하고 내가 만들고있는 새 폴더 을 삽입하고 싶습니다. 새 파일 이름은 동일한 스프레드 시트의 정보가있는 으로 작성됩니다.

다음과 같이 시도해보십시오!

function CopyFile(originalFileID, destinationFolderID) { 
    var destinationFolder = DriveApp.getFolderById(destinationFolderID) ; 
    var fileToCopy = DriveApp.getFileById(originalFileID) 
    var copiedFile = fileToCopy.makeCopy(<new name>, destinationFolder) 
    fileToCopy.setTrashed(true); // alternatively, you can use 
    // Drive.Files.remove(originalFileID); 
} 

희망이 있습니다. GAS를 사용한 지 오래되었으므로 잘하면 다음과 같이 컴파일됩니다.

+0

의견을 보내 주셔서 감사합니다. 나는 그것을 한 번 줄 것이다! –

0

생성 된 새 폴더의 이름에 타임 스탬프를 추가 할 수 있습니다. 각 타임 스탬프는 밀리 초에 고유 할 것입니다.

function uniqueFolderName() { 
    var folderName = "1808"; 
    var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyyMMddHHmmssSSS"); 
    var newFolderName = folderName + formattedDate; 
    Logger.log(newFolderName); 
} 
관련 문제