Hintergrund
Google wird seine Richtlinien zur Vorratsdatenspeicherung mit Wirkung zum 1. Juni 2021 ändern . Kurz gesagt: Dokumente und Fotos werden nun vollwertig und bei der Gesamtquote von 15 GB berücksichtigt. Wenn Ihr Konto länger als zwei Jahre inaktiv war, kann Google Ihre Daten löschen.
Ich arbeite viel mit Google Text & Tabellen und bei starker Beanspruchung wird mein Festplattenkontingent ziemlich schnell aufgebraucht. Aber es gibt gute Nachrichten: Dokumente, die vor dem 1. Juni 2021 erstellt wurden , bleiben schwerelos , sodass Sie nicht über Nacht eine Quotenverletzung erhalten.
Ich hatte sofort die Idee, die Dokumente "auf Lager" zu machen. Im Folgenden werde ich Ihnen erklären, wie dies ohne viel Zeit und Mühe geschehen kann.
Schreiben eines Skripts zum Erstellen von Dokumenten
Ich werde das Skript mit Google Apps Script schreiben.
Erstellen Sie eine neue Google - Tabelle, gehen Sie zu den Script - Editor ( Extras - Skript - Editor ).
Erstellen Sie drei Dateien
main.gs - der Hauptcode zum Erstellen von Dateien
menu.gs - Code zum Erstellen eines benutzerdefinierten Menüs beim Öffnen einer Tabelle
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
Ich habe all das in einer Tabelle zusammengefasst , die Sie in sich selbst kopieren ( Datei - Kopie erstellen ), ausführen ( Menü - Dateien erstellen ) und mehrere hundert Dateien auf Ihre Festplatte übertragen können. Wiederholen Sie den Vorgang gegebenenfalls.
Vielen Dank für Ihre Aufmerksamkeit. Ich würde mich über Feedback zum Code freuen. Viel Glück!