Создать папку и дать доступ

Рейтинг: 0Ответов: 1Опубликовано: 24.05.2023

Очень нужна помощь.

Есть скрипт, который генерирует договор в гугл.док. Задача проверить есть ли на диске папка с именем: principal_shart_name, если нет создать. Положить туда сгенерированный файл, дать доступ к файлу.

Сам скрипт:

function onOpen() {
  
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("My menu")
    .addItem('Create Document', 'DocGenerator')
    .addToUi()
}

 //main function
function DocGenerator() {

  var sm = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Main");
     
  //find clients info
  var row_active = sm.getActiveCell().getRow();
  var principal_shart_name = sm.getRange(row_active, 1).getValue();
  var principal = getClientData(principal_shart_name);

  
  //find documents info
  var document = {
    id:sm.getRange(row_active, 3).getValue(),
    date:sm.getRange(row_active, 4).getValue(),
    document_price:sm.getRange(row_active, 5).getValue(),
    document_date_end:sm.getRange(row_active, 6).getValue(),
    }

  // find template
  var docName = sm.getRange(row_active, 2).getValue();
  var docID = getTemlateID(docName);
  var docNameCopy = docName +"_" + document.id +"_" + principal.name 
  var file = DriveApp.getFileById(docID);
  file.makeCopy(docNameCopy);
  var fileCopy = DriveApp.getFilesByName(docNameCopy).next();
  var fileCopyID = fileCopy.getId();
  
  // replacement
  var body = DocumentApp.openById(fileCopyID).getBody();
  body.replaceText('{document_id}', document.id);
  body.replaceText('{document_date}', document.date);
  body.replaceText('{document_price}', document.document_price);
  body.replaceText('{document_date_end}', document.document_date_end);
  
  body.replaceText('{principal_name}', principal.name);
  body.replaceText('{principal_short_name}', principal.short_name);
  body.replaceText('{principal_id}', principal.id);
  body.replaceText('{principal_id_dateOfIssue}', principal.id_dateOfIssue);
 
  
    
  
}
function getClientData(sh_name) {

  var sc = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Clients");
  var iMax = sc.getLastRow();
  
  for(var i=2; i <= iMax; i++) {
    
    if(sc.getRange(i, 1).getValue() == sh_name) {
      break;    
    }
  }

  var client = {
    short_name: sc.getRange(i, 1).getValue(),
    name: sc.getRange(i, 2).getValue(),
    id: sc.getRange(i, 6).getValue(),
    id_dateOfIssue: sc.getRange(i, 8).getValue(),
    };
  return client;
}

function getTemlateID(docName) {

  var st = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Templates');
  var iMax = st.getLastRow();
  
  for(var i=2; i <= iMax; i++) {
    
    if(st.getRange(i, 1).getValue() == docName) {
      var docId = st.getRange(i, 2).getValue();
      return docId;    
    }
 
  }

}```

Ответы

▲ 0
  1. Получаем коллекцию папок с помощью getFoldersByName(name)
  2. Проверяем, есть ли хотя бы 1 значение у этой коллекции через hasNext()
  3. Если есть - получаем ссылку на эту папку через next() !!! Папка с таким именем может быть не одна. ТО есть в этой коллекции может быть несколько папок !!!
  4. Если нет такой папки - создаем новую, допустим через createFolder(name)