Fundo
O Google mudará sua política de retenção de dados a partir de 1º de junho de 2021 . Resumindo: os documentos e as fotos agora se tornarão completos e serão levados em conta na cota total de 15GB. Além disso, se sua conta estiver inativa por mais de dois anos, o Google pode excluir seus dados.
Eu trabalho muito com o Google Docs e, com uso pesado, minha cota de disco se esgota muito rapidamente. Mas há boas notícias: os documentos criados antes de junho de 2021 1 , então, e permanecem sem peso , para que você não receba uma violação de cota durante a noite.
Imediatamente tive a ideia de deixar os documentos "em estoque". Abaixo, direi como isso pode ser feito sem gastar muito tempo e esforço.
Escrever um script que cria documentos
Vou escrever o script usando o Google Apps Script.
Crie uma nova planilha do Google, vá para o editor de scripts ( Ferramentas - Editor de scripts ).
Crie três arquivos
main.gs - o código principal para a criação de arquivos
menu.gs - código para criar um menu personalizado ao abrir uma mesa
index.html -
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 - . , .
6 . . , HTML API,
. Exception: : docs create.
TL;DR
Reuni todos os itens acima em uma tabela que você pode copiar para você mesmo ( Arquivo - Criar uma cópia ), executar ( Menu - Criar arquivos ) e obter várias centenas de arquivos em seu disco. Repita o procedimento se necessário.
Obrigado pela atenção. Eu ficaria feliz em receber comentários sobre o código. Boa sorte!