Google Docs sera complet le 1er juin. Nous écrivons un script pour contourner cette limitation

Arrière-plan

Google modifiera sa politique de conservation des données à compter du 1er juin 2021 . En bref: les documents et photos deviendront désormais à part entière et seront pris en compte dans le quota total de 15 Go. De plus, si votre compte est inactif depuis plus de deux ans, Google peut supprimer vos données.





Je travaille beaucoup avec Google Docs et avec une utilisation intensive, mon quota de disque s'épuise assez rapidement. Mais il y a une bonne nouvelle: les documents créés avant juin 2021 1 , le so-and restent en apesanteur , donc vous n'obtenez pas une violation de quota du jour au lendemain.





J'ai tout de suite eu l'idée de rendre les documents "en stock". Ci-dessous, je vais vous dire comment cela peut être fait sans dépenser beaucoup de temps et d'efforts.





Ecrire un script qui crée des documents

J'écrirai le script à l'aide de Google Apps Script.





Créez une nouvelle feuille de calcul Google, accédez à l'éditeur de script ( Tools - Script Editor ).





Créez trois fichiers





  • main.gs - le code principal pour créer des fichiers





  • menu.gs - code pour créer un menu personnalisé lors de l'ouverture d'un tableau





  • index.html -





menu.gs onOpen(). , . - , .





function onOpen(e) { 												//    
  SpreadsheetApp.getUi() 										//   
      .createMenu('')										//  
      .addItem(' ', 'main') //   
      .addToUi();														//    
}
      
      



main.gs main(), .





function main() { //  -  
  //  HTML   
  let template = HtmlService.createTemplateFromFile(`index`);
  //     HTML 
  SpreadsheetApp.getUi()
    .showModelessDialog(template.evaluate(),` ...`);
}
      
      



index.html. HTML , . , ..





index.html
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

    <script>
      let timer = function(){ //  
        //   
        let now = (new Date()).getTime();
        
        //     - 1   
        setInterval(function(){
          //   . now   - .
          let time = (new Date()).getTime() - now;
          //  
          let minutes = Math.floor(time/60000);
          //  
          let seconds = Math.floor(time%60000/1000);
          //     lifeTime
          updateData("lifeTime", `${minutes<10?"0"+minutes:minutes}:${seconds<10?"0"+seconds:seconds}`);
        },1000);
      };
      
      updateData = function(id, value){ //       id
        let element = document.getElementById(id);
        if (element) {
          element.innerHTML = value;
        };
      };
      
      refreshData = function(){ //   
        google.script.run.withSuccessHandler(function(data){
        updateData("createTables", data.createTables); 	//  :
        updateData("createDocs", data.createDocs);			//  :
        updateData("createForms", data.createForms);		//  
        updateData("createSlides", data.createSlides);	//  
        updateData("log", data.log);										// 
      }).getData(); //   
    };

      setTimeout(setInterval(refreshData, 2000),1000); 	//     2 
      timer();																					//  
      google.script.run.doMagic();								//     
    </script>
  </head>
  <body>
    <div class=".container bg-dark text-white text-center">
      <div class="row">
        <div class="col">
          
        </div>        
        <div class="col">
          
        </div>        
        <div class="col">
          
        </div>        
        <div class="col">
          
        </div>
      </div>
      <div class="row">
        <div class="col" id="createTables">
          0
        </div>
        <div class="col" id="createDocs">
          0
        </div>        
        <div class="col" id="createForms">
          0
        </div>        
        <div class="col" id="createSlides">
          0
        </div>
      </div>
    </div>    
     <div class=".container bg-dark text-white">
      <div class="row">
        <div class="col text-right" id="label_lifeTime">
           :  
        </div>        
        <div class="col  text-left" id="lifeTime">
          00:00
        </div>        
      </div>
    </div>

    <div bg-dark text-white id="label_log">: </div>
    <ul class="list-group" id="log">
    </ul>
  </body>
</html>

      
      



, , :





  • updateData(id, value) - id





  • refreshData() - ,





  • timer() -





main.gs .





function create()
const FILES_TO_CREATE = 50;

function create(filesToCreate = FILES_TO_CREATE, folderId, prefix="file_", app, key) {
  //   -   .
  let props = PropertiesService.getScriptProperties();
  //     data.   
  let data = JSON.parse(props.getProperty(`data`));

  try{
    //    id
    let folder = DriveApp.getFolderById(folderId);
    for(var i=0; i<filesToCreate; i++){ //  filesToCreate 
      //  ,   id
      let ssId = app.create(`${prefix}${(new Date()).getTime()}`).getId();
      //     id
      let ss = DriveApp.getFileById(ssId);
      //    
      folder.addFile(ss);
      //     
      DriveApp.getRootFolder().removeFile(ss);

      //    
      data[key]=1+data[key];
      //   
      props.setProperty(`data`, JSON.stringify(data));
    };
  }catch(err){
    //    -    
    logToHtml(`Error: ${err}`, LOG_TYPES.danger);
  };
  //      
  return +i;
};
      
      



- , , .





create()
function createSheets(key) {
  //  id   
  let folderId =  PropertiesService.getScriptProperties().getProperty(`sheetsFolder`);
  //    
  let count = create(FILES_TO_CREATE, folderId, `sheet_`, SpreadsheetApp, key);
  //   
  logToHtml(`${count} sheets were created`, LOG_TYPES.success);
}

function createDocs(key) {
  let folderId =  PropertiesService.getScriptProperties().getProperty(`docsFolder`);
  let count = create(FILES_TO_CREATE, folderId, `doc_`, DocumentApp, key);
  logToHtml(`${count} docs were created`, LOG_TYPES.success);
}

function createForms(key) {
  let folderId =  PropertiesService.getScriptProperties().getProperty(`formsFolder`);
  let count = create(FILES_TO_CREATE, folderId, `form_`, FormApp, key);
  logToHtml(`${count} forms were created`, LOG_TYPES.success);
}

function createSlides(key) {
  let folderId =  PropertiesService.getScriptProperties().getProperty(`slidesFolder`);
  let count = create(FILES_TO_CREATE, folderId, `slide_`, SlidesApp, key);
  logToHtml(`${count} slides were created`, LOG_TYPES.success);
}
      
      



.





function createFolders(){
  //   -   
  let props = PropertiesService.getScriptProperties();

  //   
  let folders = [
    {key:`rootFolder`,   name:``                         },
    {key:`sheetsFolder`, name:`Sheets`, parentFolder:`rootFolder`},
    {key:`docsFolder`,   name:`Docs`,   parentFolder:`rootFolder`},
    {key:`formsFolder`,  name:`Forms`,  parentFolder:`rootFolder`},
    {key:`slidesFolder`, name:`Slides`, parentFolder:`rootFolder`},
    ];

  //      
    folders.forEach(folder=>{
      if (!props.getProperty(folder.key)){ //     
        //    rootFolder,   ,    
        let parentFolder = folder.parentFolder?DriveApp.getFolderById(props.getProperty(folder.parentFolder)):DriveApp.getRootFolder();
        //  
        let folderId = parentFolder.createFolder(folder.name).getId();
        //    
        props.setProperty(folder.key, folderId);
      };
    });
}
      
      



:





,
function doMagic(){
  let props = PropertiesService.getScriptProperties();

  //  
  let data = {
    createTables:0, 
    createDocs:0, 
    createForms:0, 
    createSlides:0, 
    startTime:new Date(),
    log:``,
  };

  //     
  props.setProperty(`data`, JSON.stringify(data));
  
  try{
    createFolders(); 							//  
    createSheets(`createTables`);	//  
    createDocs(`createDocs`);			//  
    createForms(`createForms`);		//  
    createSlides(`createSlides`);	//  
    
    // ,   
    SpreadsheetApp.getUi().alert(`!`);
  }catch(err){
    //     
    SpreadsheetApp.getUi().alert(`! ${err}`);
  };
};
      
      



- .





function getData(){ //    
  //   -
  let props = PropertiesService.getScriptProperties();
  //       
  let data = JSON.parse(props.getProperty(`data`));
  return data; // 
};
      
      



:





const LOG_TYPES = { //  .   bootstrap
  primary:   "primary",
  secondary: "secondary",
  success:   "success",
  danger:    "danger",
  warning:   "warning",
  info:      "info",  
};

function logToHtml(log, type = LOG_TYPES.primary){
  //  
  let data = getData();
  //  li  (    )  
  data.log+=`<li class="list-group-item text-${type}">${log}</li>\n`;
  //  
  let props = PropertiesService.getScriptProperties();
  props.setProperty(`data`, JSON.stringify(data));
};
      
      



. Google - . , .





Fenêtre modale pour visualiser la progression

  • 6 . . , HTML API,





  • . Exception: : docs create.






TL;DR

J'ai rassemblé tout ce qui précède dans un tableau que vous pouvez copier sur vous-même ( Fichier - Créer une copie ), exécuter ( Menu - Créer des fichiers ) et obtenir plusieurs centaines de fichiers sur votre disque. Répétez la procédure si nécessaire.





Merci pour l'attention. Je serais heureux de recevoir des commentaires sur le code. Bonne chance!








All Articles