Farem un exemple on cercarem arxius en una carpeta concreta del Drive i, si els trobem, els canviarem el nom.
Per començar, anem a prepara l'entorn. Crearem una carpeta (amb el nom que vulgueu) i, dins, hi crearem el full de càlcul on farem l'script.
El full de càlcul només tindrà dues columnes. En una, el nom original de l'arxiu. I, en l'altre, el nou nom que volem que tingui.
El nom del full de càlcul (la primer pestanya) serà Arxius.
Comencem l'script creant un menú per accedir-hi des del full de càlcul.
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Renombrar')
.addItem('Canvia el nom dels arxius','renombra')
.addToUi()
};
Farem una funció nova que serà la que farem els canvis de nom
function renombra() {
}
L'script cercarà els arxius en la mateixa carpeta on està el full de càlcul. Primer haurem d'obrir el full de càlcul des del DRIVE (amb la funció DriveApp.getFileById).
Després, obtindrem les carpetes on està.
var llibreActual = SpreadsheetApp.getActiveSpreadsheet();
//Agafem les carpetes on està el full de càlcul
var folders = DriveApp.getFileById(llibreActual.getId()).getParents();
FIxeu-vos que diu getParents() en plurar, ja que antigament en DRIVE un arxiu podia estar en més d'una carpeta. Actualment un arxiu només pot estar en una carpeta, així que agafarem la primera carpeta.
var folder = folders.next(); //Agafem la primer carpeta
Ara ens tocarà recollir totes les dades del full. Ho farem amb la propietat getDataRange() que ja hem vist.
var full_arxius = llibreActual.getSheetByName('Arxius').getDataRange();
var dades_arxius = full_arxius.getValues();
Ja ho tenim tot apunt per començar a renombrar arxius per arxius. Per tant, començarem amb la instrucció FOR.
for (var i=1;i<full_arxius.getNumRows();i++){
}
Què hem de fer amb cada fila del full de càlcul? Primer trobar l'arxiu a la carpeta.
var fitxers = folder.getFilesByName(dades_arxius[i][0]); //busquem els fitxers amb el nom indicat a la cel·la A2 (només n'hi ha un)
Drive permet que hi hagi diversos arxius amb el mateix nom en la mateixa carpeta. Per tant, ens retorna una matriu. Com que en el nostre cas ja tenim clar que no hi ha arxius repetits, només cal que agafem el primer arxius.
var fitxer = fitxers.next(); //com que només n'hi ha un, agafem el primer
I, ara que ja tenim l'arxiu, només cal assignar-li un nou nom, amb la propietat setName.
fitxer.setName(dades_arxius[i][1]); //El nom està a la cel·la B2
Amb això ja ens funcionaria. Però no està de més afegir una verificació. Que en la columna C escrigui "Ok" si ha trobat l'arxiu i l'ha renombrat. Compte que ara tornem a cel·les (i no a la matriu), per tant a la propietat getRange haurem d'indicar i+1 com a fila i 3 com a columna.
llibreActual.getSheetByName('Arxius').getRange(i+1,3).setValue("Ok")
La funció, ens queda una cosa semblant a:
function renombra() {
var llibreActual = SpreadsheetApp.getActiveSpreadsheet();
//Agafem les carpetes on està el full de càlcul
var folders = DriveApp.getFileById(llibreActual.getId()).getParents();
var folder = folders.next(); //Agafem la primer carpeta
var full_arxius = llibreActual.getSheetByName('Arxius').getDataRange();
var dades_arxius = full_arxius.getValues();
for (var i=1;i<full_arxius.getNumRows();i++){
//busquem els fitxers amb el nom indicat (només n'hi ha un)
var fitxers = folder.getFilesByName(dades_arxius[i][0]);
var fitxer = fitxers.next(); //com que només n'hi ha un, agafem el primer
fitxer.setName(dades_arxius[i][1]);
llibreActual.getSheetByName('Arxius').getRange(i+1,3).setValue("Ok")
};
};
Creeu dins la carpeta tres o quatre documents de Google amb els noms que volgueu.
Introduïu el nom al full de càlcul i assigneu-li un nom nou.
Proveu l'script a veure si canvia els noms correctament.
Igual que en el cas anterior, si es produeix qualsevol error (per exemple que un arxiu ni tingui el nom exacte que hem indicat) l'script deixarà de funcionar i els arxius que hi havia a continuació no es renombraran. La funció try and catch ens pot ajudar a evitar això.
Enlloc d'haver d'escriure la llista d'arxius amb el nom actual, podríem crear una funció que, amb la propietat d'una carpeta getFiles(), recuperes tots els arxius que hi ha a la carpeta i els copies a la columna corresponent del full de càlcul.