Google Docs estará completo el 1 de junio. Escribimos un script para evitar esta limitación.

Fondo

Google cambiará su política de retención de datos a partir del 1 de junio de 2021 . En resumen: los documentos y las fotos ahora se convertirán en completos y se tendrán en cuenta en la cuota total de 15 GB. Además, si su cuenta ha estado inactiva durante más de dos años, Google puede eliminar sus datos.





Trabajo mucho con Google Docs y, con un uso intensivo, mi cuota de disco se agotará bastante rápido. Pero hay una buena noticia: los documentos creados antes del 1 de junio de 2021 , así-y permanecen ingrávidos , por lo que no se obtiene una infracción de cuota de la noche a la mañana.





Inmediatamente tuve la idea de hacer los documentos "en stock". A continuación te diré cómo se puede hacer esto sin gastar mucho tiempo y esfuerzo.





Escribir un guión que crea documentos

Escribiré el script usando Google Apps Script.





Cree una nueva hoja de cálculo de Google, vaya al editor de secuencias de comandos ( Herramientas - Editor de secuencias de comandos ).





Crea tres archivos





  • main.gs : el código principal para crear archivos





  • menu.gs - código para crear un menú personalizado al abrir una mesa





  • 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 - . , .





Ventana modal para visualizar el progreso

  • 6 . . , HTML API,





  • . Exception: : docs create.






TL;DR

Recopilé todo lo anterior en una tabla que puede copiar usted mismo ( Archivo - Crear una copia ), ejecutar ( Menú - Crear archivos ) y obtener varios cientos de archivos en su disco. Repita el procedimiento si es necesario.





Gracias por la atención. Me encantaría recibir comentarios sobre el código. ¡Buena suerte!








All Articles