100% encontró este documento útil (6 votos)
1K vistas56 páginas

Google Apps Script

Este documento proporciona información sobre Google Apps Script, incluidos ejemplos de código para varias funciones como DriveApp, SpreadsheetApp, MailApp. Cubre temas como creación de aplicaciones web, funciones personalizadas y acceso a datos de Firebase.

Cargado por

maribel666
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (6 votos)
1K vistas56 páginas

Google Apps Script

Este documento proporciona información sobre Google Apps Script, incluidos ejemplos de código para varias funciones como DriveApp, SpreadsheetApp, MailApp. Cubre temas como creación de aplicaciones web, funciones personalizadas y acceso a datos de Firebase.

Cargado por

maribel666
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

google-apps-script

#google-
apps-script
Tabla de contenido
Acerca de 1

Capítulo 1: Empezando con google-apps-script 2

Observaciones 2

Examples 2

Instalación o configuración 2

Tipos de scripts 3

Ejecutando / depurando tu script 4

Hola Mundo 4

Una mirada más profunda a Google Apps Script 4

Capítulo 2: Aplicaciones Script Web Apps 6

Observaciones 6

Examples 6

Formulario de aplicación web 6

Capítulo 3: Crear una función personalizada para las hojas de Google 12

Introducción 12

Examples 12

Gravedad estándar personalizada constante 12

Ejemplo básico 13

Capítulo 4: DriveApp 14

Examples 14

Crear una nueva carpeta en una raíz de Google Drive 14

Crear nuevo archivo en Google Drive de un determinado tipo de Mime 14

Crear un nuevo archivo de texto en la carpeta raíz de Google Drive 14

Crear un nuevo archivo en Google Drive desde un blob 14

Obtenga todas las carpetas: coloque las carpetas en un token de continuación y luego recup 15

Obtenga todos los archivos, póngalos en un token de continuación, luego recupérelos 15

Agregar una carpeta a la unidad raíz 16

Crea un nuevo archivo de texto y agrégalo a la carpeta raíz. 16

Obtener todos los archivos en una carpeta de la unidad 17

Capítulo 5: DriveApp - getFileById (id) 19


Observaciones 19

Examples 19

Obtenga un archivo de Google Drive utilizando el ID de archivo 19

Capítulo 6: Firebase y AppScript: Introducción 20

Introducción 20

Examples 20

Conexión a un proyecto de Firebase en GAS y transferencia de datos de Google Spreadsheet a 20

Instalar el recurso Firebase en el AppScript 20

Ahora vamos a tomar un ejemplo para leer y escribir datos de Firebase. 22

¿Cómo encontrar el firebaseURL y la clave secreta? 23

Ahora ha insertado el firebaseURL y la clave secreta. Ahora estás listo para ir. Haga clic 24

Algunas funciones más para implementar lectura y escritura. 24

1. Escribir un dato simple para probar si la conexión está funcionando o no. 24

2. Leer todos los datos. 24

3. Leer un registro específico. 24

4. Actualizar un registro específico. 25

Capítulo 7: GmailApp 26

Observaciones 26

Examples 26

Obtener archivo CSV adjunto a un correo 26

Capítulo 8: Google hojas MailApp 27

Introducción 27

Examples 27

Un ejemplo básico de aplicación de correo 27

Acceda a los datos de la hoja 27

Usa la hoja de datos para enviar un correo electrónico 28

Enviando contenido HTML en correo 30

Capítulo 9: Hoja de cálculo Añadir menú 33

Sintaxis 33

Parámetros 33

Observaciones 33
Examples 33

Crear un nuevo menú 33

Crear menú personalizado 34

Capítulo 10: Llamadas del cliente a Google apps-script 35

Introducción 35

Examples 35

Este es un ejemplo de una llamada del lado del cliente a un script de aplicación de Google 35

Capítulo 11: Script de la aplicación web de Google para descarga automática desde Google D 36

Introducción 36

Observaciones 36

Examples 36

[Link] 36

có[Link] 37

Cómo funciona 38

Capítulo 12: Servicio de hoja de cálculo 41

Observaciones 41

Examples 41

Hoja 41

Copie un valor de una hoja a la hoja actual 42

Obtener la última fila en una sola columna 42

Inserción de matrices como filas 43

Capítulo 13: Servicio DriveApp 44

Observaciones 44

Examples 44

Crear una nueva carpeta en la unidad raíz de Google 44

Crear nuevo archivo en Google Drive de un determinado tipo de Mime 44

Crear un nuevo archivo de texto en la carpeta de la unidad raíz de Google 44

Crear un nuevo archivo en Google Drive desde un blob 45

Obtenga todas las carpetas: coloque las carpetas en un token de continuación y luego recup 45

Obtenga todos los archivos, póngalos en un token de continuación, luego recupérelos 46

Capítulo 14: Servicio DriveApp - Archivos por tipo y cadena de búsqueda 47

Parámetros 47
Examples 47

Obtenga archivos por tipo de archivo con cadena coincidente en nombre de archivo 47

Capítulo 15: SpreadsheetApp Active Sheet 49

Observaciones 49

Examples 49

getActive () - Obtener hoja de cálculo activa 49

Creditos 50
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: google-apps-script

It is an unofficial and free google-apps-script ebook created for educational purposes. All the
content is extracted from Stack Overflow Documentation, which is written by many hardworking
individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official google-apps-
script.

The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.

Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to info@[Link]

[Link] 1
Capítulo 1: Empezando con google-apps-
script
Observaciones
La descripción oficial de Google Apps Script se publica en [Link] ,
desde allí

Google Apps Script es un lenguaje de scripts en la nube de JavaScript que


proporciona formas sencillas de automatizar tareas en los productos de Google y
servicios de terceros y crear aplicaciones web.

Desde [Link]

Apps Script se basa en JavaScript 1.6 , además de algunas características de 1.7 y


1.8 . Por lo tanto, muchas funciones básicas de JavaScript están disponibles además
de los servicios integrados y avanzados de Google : puede usar objetos comunes
como Array , Date , RegExp , etc. , así como los objetos globales de Math y Object .
Sin embargo, debido a que el código de Apps Script se ejecuta en los servidores de
Google (no en el lado del cliente, excepto en las páginas del servicio HTML ), las
funciones basadas en el navegador como la manipulación de DOM o la API de
Windows no están disponibles.

Examples
Instalación o configuración

Google Apps Script no requiere instalación o instalación. El único requisito es una cuenta de
Google. Una cuenta de Gmail funciona tan bien como una cuenta de Google Apps for Work /
Education / Government. Puede crear una nueva cuenta de Google yendo a [Link]

Comience su primer script yendo a [Link] . También puede acceder a Google Apps
Script en las tools -> Script editor... de muchas aplicaciones de Google, es decir , documentos,
hojas, formularios, etc. Google Apps Script también se puede agregar directamente a su Google
Drive con la función Connect more apps..

La documentación oficial se puede encontrar en [Link]/apps-script/ .

Para que los scripts de aplicación se ejecuten, deben contener un archivo [Link]. El archivo
[Link] debe contener una función llamada doGet (secuencias de comandos independientes) o
una función onOpen (secuencias de comandos adicionales). Los inicios rápidos en la
documentación contienen ejemplos.

Si una api está activada en el script de aplicación, también debe estar activada en la consola de
desarrolladores. Sin embargo, la consola de desarrolladores contiene api que se pueden activar

[Link] 2
pero no aparecen en la interfaz de la aplicación-script. Por ejemplo, Marketplace SDK debe estar
activado en la consola de desarrolladores antes de que la aplicación pueda publicarse en Google
Play Store o en una implementación de dominio de G Suite.

Para las aplicaciones de Google para educación / trabajo / gobierno, hay configuraciones en la
consola de administración de dominio que se pueden ajustar para permitir o no permitir que se
ejecuten los scripts de aplicación.

Tipos de scripts

Los scripts de Google App son de tres tipos.

• Ser único
• Limitado a las aplicaciones de Google
• Aplicaciones web

Escritura independiente

Los scripts independientes no están vinculados a ninguna aplicación de Google, es decir ,


documentos, hojas o formularios, etc. Los scripts independientes se pueden crear visitando
[Link] o conectando el script de Google App con Google Drive. El script independiente
se puede usar para programar aplicaciones de Google de forma independiente, se puede usar
como una aplicación web o se puede configurar para que se ejecute automáticamente desde un
disparador instalable. Consulte la documentación para el script independiente.

Limitado a las aplicaciones de Google

Script enlazado a Google Apps también conocido como script enlazado a contenedor; a diferencia
de los scripts independientes, están vinculados a las aplicaciones de Google, es decir, Google
Docs o Google Sheets, etc. Los scripts encuadernados en contenedores pueden crearse
seleccionando tools> Script editor desde Google App. Algunas funciones, como los cuadros de
diálogo, las indicaciones, los menús y la barra lateral, solo se proporcionan mediante secuencias
de comandos de contenedor. Además, las secuencias de comandos de contenedor se utilizan
para crear complementos de Google . Consulte la documentación para los scripts enlazados al
contenedor.

Aplicaciones web

Google App Script se puede utilizar como aplicación web, ya que se puede acceder a él mediante
el navegador. La aplicación web puede proporcionar una interfaz de usuario en el navegador y
puede hacer uso de las aplicaciones de Google, es decir , documentos, hojas, etc. Tanto las
secuencias de comandos independientes como las de Google Apps pueden convertirse en
aplicaciones web. Para que cualquier script funcione como una aplicación web, el script debe
cumplir con dos requisitos:

• incluye una función doGet() o doPost() .


• La función devuelve un objeto HTML Servicio HtmlOutput o un objeto Content Service
TextOutput.

[Link] 3
Las funciones Inshort, doGet() y doPost() funcionan como los controladores http get y post request
respectivamente.

Para más detalles sobre aplicaciones web, consulte la documentación oficial.

Ejecutando / depurando tu script

Intente ejecutar su código desde la barra de herramientas como se muestra a continuación:

En su código, si tiene más de una función, antes de ejecutarla, debe mencionar la función con la
que desea ejecutar. Por ejemplo :

Alternativamente, puede presionar ctrl + r desde su teclado para ejecutar el código. Guardará el
código primero, si no se guarda, y luego lo ejecutará. Pero, para que esto funcione, debe haber
seleccionado la función, como se ve en la imagen de arriba.

Además, si algunas actividades externas invocan su script, aún podrá ver los registros haciendo
clic en ver-> registros si está registrando algo después de que se ejecuta el código.

Hola Mundo

Vamos a saludar como un cuadro de mensaje.

function helloWorld()
{
[Link]("Hello World");
}

Para ejecutar el script, haga clic en ▶ o seleccione el elemento de menú Ejecutar -> helloWorld

Una mirada más profunda a Google Apps Script

Google Apps Script es una plataforma como servicio basado en JavaScript que se utiliza

[Link] 4
principalmente para automatizar y ampliar Google Apps. Apps Script se ejecuta exclusivamente
en la infraestructura de Google y no requiere aprovisionamiento ni configuración del servidor. Un
IDE en línea sirve como interfaz para toda la plataforma que conecta todos los servicios que están
disponibles para Apps Script. La autenticación del usuario se incluye en la plataforma a través de
OAuth2 y no requiere ningún código o configuración por parte del autor del script.

Apps Script se ejecuta en el lado del servidor, pero puede tener interfaces de usuario creadas con
HTML, CSS, JavaScript o cualquier otra tecnología compatible con el navegador. A diferencia de
Nodejs, que está controlado por eventos, los scripts de aplicación se ejecutan en un modelo de
subprocesos. Todas las llamadas a un script generan una instancia única de ese script que se
ejecuta de forma aislada de todas las demás instancias. Cuando una instancia de un script
termina su ejecución se destruye.

Las funciones en Apps Script están bloqueando, por lo que no se necesitan patrones de
devolución de llamada y de programación asíncrona. El bloqueo se utiliza para evitar que las
secciones críticas de código, como el archivo IO, se ejecuten simultáneamente en diferentes
instancias.

En la práctica, escribir scripts de aplicaciones es simple. A continuación se muestra un sencillo


script que crea una nueva hoja de cálculo a partir de una plantilla de hoja de cálculo.

// Create a new spreadsheet from a template


function createSpreadsheet(){
var templateFileId = '1Azcz9GwCeHjGl9TXf4aUh6g20Eqmgd1UMSdNVjzIZPk';
var sheetName = 'Account Log for:' + new Date();
[Link](templateFileId).copy(sheetName);
}

Lea Empezando con google-apps-script en línea: [Link]


script/topic/1154/empezando-con-google-apps-script

[Link] 5
Capítulo 2: Aplicaciones Script Web Apps
Observaciones
Esta es una aplicación web de formulario de ejemplo, el bit del lado del cliente muestra algunos
diseños UX básicos, como un botón de envío deshabilitado cuando se envía el formulario, o un
mensaje de error si falla ... etc.

El bit de Script de aplicaciones es muy básico. Contiene solo el código necesario para entregar el
html y validar el campo.

Aquí hay un enlace a esta aplicación de ejemplo en acción: Ejemplo de formulario de script de
aplicaciones

Nota: Debes iniciar sesión en una cuenta de Google.

La estructura del archivo de Apps Script es así:

• [Link]
• [Link]
• Hoja de [Link]
• [Link]

Examples
Formulario de aplicación web

Script de aplicaciones:

//Triggered when the page is navigated to, serves up HTML


function doGet(){
var template = [Link]('index');
return [Link]()
.setTitle('Example App')
.setSandboxMode([Link]);
}

//Called from the client with form data, basic validation for blank values
function formSubmit(formData){
for(var field in formData){
if(formData[field] == ''){
return {success: false, message: field + ' Cannot be blank'}
}
}
return {success: true, message: 'Sucessfully submitted!'};
}

HTML

[Link] 6
<!DOCTYPE html>
<html>

<head>
<base target="_top">
<link href="[Link] rel="stylesheet">
<script src="[Link]
type="text/javascript"></script>
</head>

<body>
<div id="mainForm">
<h1>Example Form</h1>
<form>
<div>
<div class="inline form-group">
<label for="name">Name</label>
<input id="nameInput" style="width: 150px;" type="text">
</div>
</div>
<div>
<div class="inline form-group">
<label for="city">City</label>
<input id="cityInput" style="width: 150px;" type="text">
</div>
<div class="inline form-group">
<label for="state">State</label>
<input id="stateInput" style="width: 40px;" type="text">
</div>
<div class="inline form-group">
<label for="zip-code">Zip code</label>
<input id="zip-codeInput" style="width: 65px;" type="number">
</div>
</div>
<div class="block form-group">
<label for="typeSelect">Type</label>
<select id="typeSelect">
<option value="">
</option>
<option value="Type 1 ">
Type 1
</option>
<option value="Type 2 ">
Type 2
</option>
<option value="Type 3 ">
Type 3
</option>
<option value="Type 4 ">
Type 4
</option>
</select>
</div>
<button class="action" id="submitButton" type="button">Submit</button>
<button class="clear" id="clearFormButton" type="button">Clear Form</button>
</form>
<div class="hidden error message">
<div class="title">Error:</div>
<div class="message"></div>
</div>
<div class="hidden success message">

[Link] 7
<div class="title">Message:</div>
<div class="message">Sucessfully submitted</div>
</div>
</div>
<?!= [Link]('JavaScript').getContent(); ?>
<?!= [Link]('Stylesheet').getContent(); ?>
</body>

</html>

CSS

<style>
.hidden {
display: none;
}

.form-group {
margin: 2px 0px;
}

#submitButton {
margin: 4px 0px;
}

body {
margin-left: 50px;
}

.message {
padding: 2px;
width: 50%;
}

.message > * {
display: inline-block;
}

.message .title {
font-weight: 700;
font-size: 1.1em;
}

.[Link] {
border: 1px solid #5c9a18;
background: #e4ffe4;
color: #2a8e2a;
}

.[Link] {
background: #f9cece;
border: 1px solid #7d2929;
}

.[Link] .title {
color: #863030;
}

[Link] {
background: -moz-linear-gradient(top, #dd6e39, #d17636);

[Link] 8
background: -ms-linear-gradient(top, #dd6e39, #d17636);
background: -o-linear-gradient(top, #dd6e39, #d17636);
background: -webkit-linear-gradient(top, #dd6e39, #d17636);
background: linear-gradient(top, #dd6e39, #d17636);
border: 1px solid transparent;
color: #fff;
text-shadow: 0 1px rgba(0, 0, 0, .1);
}

[Link]:hover {
background: -moz-linear-gradient(top, #ca602e, #bd6527);
background: -ms-linear-gradient(top, #ca602e, #bd6527);
background: -o-linear-gradient(top, #ca602e, #bd6527);
background: -webkit-linear-gradient(top, #ca602e, #bd6527);
background: linear-gradient(top, #ca602e, #bd6527);
border: 1px solid transparent;
color: #fff;
text-shadow: 0 1px rgba(0, 0, 0, .1);
}
</style>

JavaScript

<script>
var inputs = [
'nameInput',
'cityInput',
'stateInput',
'zip-codeInput',
'typeSelect'
];

$(function(){
var pageApp = new formApp();
$('#submitButton').on('click', [Link]);
$('#clearFormButton').on('click', [Link]);
});

var formApp = function(){


var self = this;

//Clears form input fields, removes message, enables submit


[Link] = function(){
for(var i = 0; i < [Link]; i++){
$('#'+inputs[i]).val('');
}
toggleSubmitButton(false);
setErrorMessage(false);
setSuccessMessage(false);
}

//Submits the form to apps script


[Link] = function(){
toggleSubmitButton(true);
setSuccessMessage(false);
setErrorMessage(false);

[Link]
.withSuccessHandler([Link])
.withFailureHandler([Link])

[Link] 9
.formSubmit([Link]());
};

//Retrieves the form data absed on the input fields


[Link] = function(){
var output = {};
for(var i = 0; i < [Link]; i++){
output[inputs[i]] = $('#'+inputs[i]).val();
}
[Link](output)
return output;
}

//When the apps script sucessfully returns


[Link] = function(value){
if([Link]){
setSuccessMessage(true, [Link]);
} else {
setErrorMessage(true, [Link]);
toggleSubmitButton(false);
}
}

//When the apps script threw an error


[Link] = function(value){
toggleSubmitButton(false);
setErrorMessage(true, [Link]);
}
}

//Disables/enables the submit button


function toggleSubmitButton(disabled){
$('#submitButton').prop('disabled', disabled);
}

//Sets the general message box's message and enables or disabled the error box
function setSuccessMessage(show, message){
if(show){
$('.[Link]').removeClass('hidden');
$('.[Link] .message').text(message);
} else {
$('.[Link]').addClass('hidden');
$('.[Link] .message').text('');
}
}

//Sets the error message box's message and enables or disabled the error box
function setErrorMessage(show, message){
if(show){
$('.[Link]').removeClass('hidden');
$('.[Link] .message').text(message);
} else {
$('.[Link]').addClass('hidden');
$('.[Link] .message').text('');
}
}

function getFormData(){
var output = {};
for(var i = 0; i < [Link]; i++){
output[inputs[i]] = $('#'+inputs[i]).val();

[Link] 10
}
return output;
}
</script>

Lea Aplicaciones Script Web Apps en línea: [Link]


script/topic/4874/aplicaciones-script-web-apps

[Link] 11
Capítulo 3: Crear una función personalizada
para las hojas de Google
Introducción
Una función personalizada en google docs está vinculada a un documento específico (y, por lo
tanto, solo se puede utilizar en ese documento).

Por lo tanto, debe crearse con la edición de secuencias de comandos de ese documento
(Herramientas -> Editor de secuencias de comandos). Una vez guardado, se puede usar como
cualquier otra fórmula de hoja de cálculo regular.

Examples
Gravedad estándar personalizada constante

Esta función devuelve la constante de gravedad estándar en las unidades de aceleración


especificadas (1 para cm / s², 2 para ft / s², 3 para m / s²)

/**
* Returns the standard gravity constant in the specified acceleration units
* Values taken from [Link] on July 24, 2016.
*
* @param {number} input 1 for cm/s², 2 for ft/s², 3 for m/s²
*
* @customfunction
*/
function sg(units_key) {
var value;
switch(units_key) {
case 1:
value = 980.665;
break;
case 2:
value = 32.1740;
break;
case 3:
value = 9.80665;
break;
default:
throw new Error('Must to specify 1, 2 or 3');
}
return value;
}

Para usar la función, debe estar vinculada a una hoja de cálculo utilizando el editor de secuencias
de comandos (Herramientas -> Editor de secuencias de comandos ...). Una vez que se agrega la
función, se puede usar como cualquier otra función de las hojas de Google llamando a la función
en la fórmula de una celda.

[Link] 12
Observe cómo se muestra la función en autocompletar cuando se escribe en una fórmula. Esto se
debe al comentario de varias líneas sobre la declaración de la función que se utiliza para describir
qué hace la función similar a JSDoc y Javadoc. Para que la fórmula aparezca en autocompletar,
la etiqueta @customfunction debe especificarse en el comentario.

Ejemplo básico

Para evitar errores antiestéticos #DIV/0 en una hoja de cálculo, se puede usar una función
personalizada.

/**
* Divides n by d unless d is zero, in which case, it returns
* the given symbol.
*
* @param {n} number The numerator
* @param {d} number The divisor
* @param {symbol} string The symbol to display if `d == 0`
* @return {number or string} The result of division or the given symbol
*
* @customfunction
*/
function zeroSafeDivide(n, d, symbol) {
if (d == 0)
return symbol;
else
return n / d;
}

Para usar la función, debe estar vinculada a una hoja de cálculo utilizando el editor de secuencias
de comandos ( Herramientas -> Editor de secuencias de comandos ... ). Una vez que se
agrega la función, se puede usar como cualquier otra función de las hojas de Google llamando a
la función en la fórmula de una celda.

Observe cómo se muestra la función en autocompletar cuando se escribe en una fórmula. Esto se
debe al comentario de varias líneas sobre la declaración de la función que se utiliza para describir
qué hace la función similar a JSDoc y Javadoc. Para que la fórmula aparezca en autocompletar,
la etiqueta @customfunction debe especificarse en el comentario.

Lea Crear una función personalizada para las hojas de Google en línea:
[Link]
hojas-de-google

[Link] 13
Capítulo 4: DriveApp
Examples
Crear una nueva carpeta en una raíz de Google Drive

function createNewFolderInGoogleDrive(folderName) {
return [Link](folderName);
}

Use la función createNewFolderInGoogleDrive para crear una carpeta llamada Test folder en una
raíz de Google Drive:

var newFolder = createNewFolderInGoogleDrive('Test folder');

newFolder tiene tipo de carpeta de clase:

// output id of new folder to log


[Link]([Link]());

Crear nuevo archivo en Google Drive de un determinado tipo de Mime

function createGoogleDriveFileOfMimeType() {
var content,fileName,newFile;//Declare variable names

fileName = "Test File " + new Date().toString().slice(0,15);//Create a new file name with
date on end
content = "This is the file Content";

newFile = [Link](fileName,content,[Link]);//Create a new file in


the root folder
};

Crear un nuevo archivo de texto en la carpeta raíz de Google Drive

function createGoogleDriveTextFile() {
var content,fileName,newFile;//Declare variable names

fileName = "Test Doc " + new Date().toString().slice(0,15);//Create a new file name with
date on end
content = "This is the file Content";

newFile = [Link](fileName,content);//Create a new text file in the root folder


};

Crear un nuevo archivo en Google Drive desde un blob

function createGoogleDriveFileWithBlob() {

[Link] 14
var blob,character,data,fileName,i,L,max,min,newFile,randomNmbr;//Declare variable names

fileName = "Test Blob " + new Date().toString().slice(0,15);//Create a new file name with
date on end

L = 500;//Define how many times to loop


data = "";
max = 126;
min = 55;

for (i=0;i<L;i+=1) {//Loop to create data


randomNmbr = [Link]([Link]()*(max-min+1)+min);//Create a random number
//[Link]('randomNmbr: ' + randomNmbr);
character = [Link](randomNmbr);

//[Link]('character: ' + character);//Print the character to the Logs


data = data + character;
};

blob = [Link](data, MimeType.PLAIN_TEXT, fileName);//Create a blob with random


characters

newFile = [Link](blob);//Create a new file from a blob

[Link](fileName);//Set the file name of the new file


};

Obtenga todas las carpetas: coloque las carpetas en un token de


continuación y luego recupérelo

function processGoogleDriveFolders() {
var arrayAllFolderNames,continuationToken,folders,foldersFromToken,thisFolder;//Declare
variable names

arrayAllFolderNames = [];//Create an empty array and assign it to this variable name

folders = [Link]();//Get all folders from Google Drive in this account


continuationToken = [Link]();//Get the continuation token

[Link](18000);//Pause the code for 3 seconds

foldersFromToken = [Link](continuationToken);//Get the original


folders stored in the token
folders = null;//Delete the folders that were stored in the original variable, to prove that
the continuation token is working

while ([Link]()) {//If there is a next folder, then continue looping


thisFolder = [Link]();//Get the next folder
[Link]([Link]());//Get the name of the next folder
};

[Link](arrayAllFolderNames);//print the folder names to the Logs


};

Obtenga todos los archivos, póngalos en un token de continuación, luego


recupérelos

[Link] 15
function processGoogleDriveFiles() {
var arrayAllFileNames,continuationToken,files,filesFromToken,fileIterator,thisFile;//Declare
variable names

arrayAllFileNames = [];//Create an empty array and assign it to this variable name

files = [Link]();//Get all files from Google Drive in this account


continuationToken = [Link]();//Get the continuation token

[Link](18000);//Pause the code for 3 seconds

filesFromToken = [Link](continuationToken);//Get the original files


stored in the token
files = null;//Delete the files that were stored in the original variable, to prove that the
continuation token is working

while ([Link]()) {//If there is a next file, then continue looping


thisFile = [Link]();//Get the next file
[Link]([Link]());//Get the name of the next file
};

[Link](arrayAllFileNames);
};

Agregar una carpeta a la unidad raíz

function DriveAppAddFolder(child) {//Adds file to the root drive in Google Drive


var body,returnedFolder;//Declare variable names

if (!child) {
body = "There is no folder";
[Link]([Link]().getEmail(), "", "Error Adding Folder!", body)
return;
};

returnedFolder = [Link](child);//Add a folder to the root drive

[Link]('returnedFolder: ' + returnedFolder);//Print the folder results to the Logs


};

function createNewFolderInGoogleDrive() {
var folder,newFolderName,timeStamp,dateTimeAsString;

timeStamp = new Date();//Create a new date


dateTimeAsString = [Link]().slice(0,15);

newFolderName = 'Test Folder Name ' + dateTimeAsString;//Create new folder name with
date/time appended to name

folder = [Link](newFolderName);//Create a new folder


DriveAppAddFolder(folder);//Call a function and pass a folder to the function
};

Crea un nuevo archivo de texto y agrégalo a la carpeta raíz.

function DriveAppAddFile(child) {//Adds file to the root drive in Google Drive

[Link] 16
var body,returnedFolder;//Declare variable names

if (!child) {
body = "There is no file";
[Link]([Link]().getEmail(), "", "Error Adding File!", body)
return;
};

returnedFolder = [Link](child);

[Link]('returnedFolder: ' + returnedFolder);


};

function createNewFileInGoogleDrive() {
var content,file,newFileName,timeStamp,dateTimeAsString;

timeStamp = new Date();//Create a new date


dateTimeAsString = [Link]().slice(0,15);

content = "This is test file content, created at: " + dateTimeAsString;//Create content for
new file
newFileName = 'Test File ' + dateTimeAsString;//Create new file name with date/time appended
to name

file = [Link](newFileName, content);//Create a new file


DriveAppAddFile(file);//Call a function and pass a file to the function
};

Obtener todos los archivos en una carpeta de la unidad

function onOpen() {

// Add a custom menu to run the script


var ss = [Link]();
var searchMenuEntries = [ {name: "Run", functionName: "search"}];
[Link]("Get Files", searchMenuEntries);
}

function getFiles() {

// Get the active spreadsheet and the active sheet


var ss = [Link]();
var ssid = [Link]();

// Look in the same folder the sheet exists in. For example, if this template is in
// My Drive, it will return all of the files in My Drive.
var ssparents = [Link](ssid).getParents();
var sheet = [Link]();

// Set up the spreadsheet to display the results


var headers = [["Last Updated", "File Owner", "File Name", "File URL"]];
[Link]("A1:D").clear();
[Link]("A1:D1").setValues(headers);

// Loop through all the files and add the values to the spreadsheet.
var folder = [Link]();
var files = [Link]();
var i=1;

[Link] 17
while([Link]()) {
var file = [Link]();
if([Link]() == [Link]()){
continue;
}
[Link](i+1, 1, 1,
4).setValues([[[Link](),[Link]().getName(),[Link](),
[Link]()]]);
i++;
}
}

Lea DriveApp en línea: [Link]

[Link] 18
Capítulo 5: DriveApp - getFileById (id)
Observaciones
También es posible obtener un archivo por la URL del archivo. El ID de un archivo está en la url,
por lo que usar el ID en lugar de la URL completa significa que el parámetro es más corto.
Almacenar la URL en lugar de la ID ocupa más espacio.

Examples
Obtenga un archivo de Google Drive utilizando el ID de archivo

function getGoogleDriveFileById(id) {
var file;

file = [Link](id);//Returns a file - The "id" must be a string

//One way to manually get a file ID


// - Open the file from Google Drive
// - The file ID is in the URL in the browsers address bar
//[Link]
};

Lea DriveApp - getFileById (id) en línea: [Link]


script/topic/6087/driveapp---getfilebyid--id-

[Link] 19
Capítulo 6: Firebase y AppScript:
Introducción
Introducción
Integre Firebase con Google AppScript para leer y escribir datos en la base de datos de Firebase.

Firebase es un sistema de base de datos NoSQL de Google que utiliza una base de datos en
tiempo real para ayudar a crear y alojar aplicaciones en dispositivos móviles, de escritorio y
tabletas. Las bases de datos NoSQL utilizan los objetos JSON para almacenar los datos en
formato estructurado.

Examples
Conexión a un proyecto de Firebase en GAS y transferencia de datos de
Google Spreadsheet a Firebase

Instalar el recurso Firebase en el AppScript


• Para hacer eso, haga clic en Recursos y luego en Bibliotecas.
• Firebase tiene una clave de biblioteca de proyecto única que debe instalarse en AppScript.

• Haga clic en Bibliotecas. Aparecerá la siguiente ventana emergente. Ingrese la siguiente


clave de proyecto en el cuadro de texto. MYeP8ZEEt1ylVDxS7uyg9plDOcoke7-2l Esta es
la clave de la biblioteca del proyecto para Firebase.

[Link] 20
• Ahora en la versión elegir la versión de lanzamiento público estable.

[Link] 21
• Haga clic en Guardar. Ahora Firebase se instaló correctamente en su AppScript para que
pueda trabajar.

Ahora vamos a tomar un ejemplo para leer y escribir datos


de Firebase.
• Ahora tomamos una tabla de muestra diseñada en Google Sheets.

[Link] 22
• Ahora para construir la base de datos en Firebase usando esta tabla en las hojas. Agregue
el siguiente código en el AppScript.

function writeDataToFirebase() {
var ss = [Link]("1LACsj0s3syAa9gvORdRWBhJ_YcXHybjQfHPgw3TLQ6g");
var sheet = [Link]()[0];
var data = [Link]().getValues();
var dataToImport = {};
for(var i = 1; i < [Link]; i++) {
var firstName = data[i][0];
var lastName = data[i][1];
dataToImport[firstName + '-' + lastName] = {
firstName:firstName,
lastName:lastName,
emailAddress:data[i][2],
semester:data[i][4],
department:data[i][5],
};
}
var firebaseUrl = "[Link]
var secret = "secret-key";
var base = [Link](firebaseUrl, secret);
[Link]("", dataToImport);
}

Reemplace la ID de la hoja de cálculo y el firebaseURL y la clave secreta.

¿Cómo encontrar el firebaseURL y la clave secreta?


• Ve a tu Firebase Dashboard y haz clic en el engranaje de configuración en la esquina
superior izquierda. Haga clic en Configuración del proyecto.

[Link] 23
• Vaya a la sección Cuentas de servicio donde puede encontrar el databaseURL. Esto sirve
como el firebaseURL.
• Ahora haga clic en la pestaña Secretos de la base de datos y podrá encontrar la clave
secreta.

Ahora ha insertado el firebaseURL y la clave secreta. Ahora


estás listo para ir. Haga clic en el código de ejecución en el
motor de AppScript.
• Le pedirá que revise los permisos por primera vez cuando ejecute.
• Haga clic en Revisar permisos y Permitir.
• Ahora ejecuta su función y puede ver la tabla creada en Firebase Database.

Para ver la base de datos, vaya al panel de Firebase y haga clic en la base de datos para
ver la base de datos.

Algunas funciones más para implementar lectura y escritura.

1. Escribir un dato simple para probar si la conexión está


funcionando o no.

function myFunction(){
var firebaseUrl = "[Link]
var secret = "secret-key";
var base = [Link](firebaseUrl, secret);
[Link]("test", "Hello Firebase");
}

2. Leer todos los datos.

function getAllData() {
var firebaseUrl = "[Link]
var secret = "secret-key";
var base = [Link](firebaseUrl, secret);
var data = [Link]();
for(var i in data) {
[Link](data[i].firstName + ' ' + data[i].lastName);
}
}

Los datos leídos se muestran en los registros. Para verificar los registros, haga clic en
haga clic en Ver → Registros o simplemente use Control + Intro.

3. Leer un registro específico.


function getContact() {

[Link] 24
var firebaseUrl = "[Link]
var secret = "secret-key";
var base = [Link](firebaseUrl, secret);
var contact = [Link]("Yash-Udasi");
[Link](contact);
}

Los datos leídos se muestran en los registros. Para verificar los registros, haga clic en
haga clic en Ver → Registros o simplemente use Control + Intro.

4. Actualizar un registro específico.

function updateData() {
var firebaseUrl = "[Link]
var secret = "secret-key";
var base = [Link](firebaseUrl, secret);
[Link]("Yash-Udasi/emailAddress", "[Link]@[Link]");
}

Lea Firebase y AppScript: Introducción en línea: [Link]


script/topic/9417/firebase-y-appscript--introduccion

[Link] 25
Capítulo 7: GmailApp
Observaciones
Consulte también la referencia de API oficial de GmailApp para obtener más detalles sobre los
métodos disponibles.

Examples
Obtener archivo CSV adjunto a un correo

Supongamos que tenemos un sistema que envía informes diarios por correo electrónico en forma
de archivos CSV adjuntos y que queremos acceder a ellos.

function getCsvFromGmail() {
// Get the newest Gmail thread based on sender and subject
var gmailThread = [Link]("from:noreply@[Link] subject:\"My daily report\"", 0,
1)[0];

// Get the attachments of the latest mail in the thread.


var attachments = [Link]()[[Link]() -
1].getAttachments();

// Get and and parse the CSV from the first attachment
var csv = [Link](attachments[0].getDataAsString());
return csv;
}

Lea GmailApp en línea: [Link]

[Link] 26
Capítulo 8: Google hojas MailApp
Introducción
Este servicio permite a los usuarios enviar correos electrónicos con control completo sobre el
contenido del correo electrónico. A diferencia de GmailApp, el único propósito de MailApp es
enviar un correo electrónico. MailApp no puede acceder a la bandeja de entrada de Gmail de un
usuario.

Es más probable que los cambios en los scripts escritos con GmailApp desencadenen una
solicitud de nueva autorización de un usuario que los scripts de MailApp.

Examples
Un ejemplo básico de aplicación de correo

MailApp es la api de Google App Script que puede usarse para enviar correo

function sendEmails() {

var subject = "A subject for your new app!";


var message = "And this is the very first message"
var recipientEmail = "abc@[Link]";

[Link](recipientEmail, subject, message);


}

La clase MailApp está limitada a cuotas basadas en su cuenta de Google:

• Usuario consumidor (es decir, cuenta personal de Gmail): 100 destinatarios / día
• Cliente de Google Apps (legado): 100 destinatarios / día
• GSuite (básico / Gov / Edu / Business): 1500 destinatarios / día

Puedes consultar tu cuota de correo electrónico dentro de MailApp

function checkQuota() {
[Link]([Link]());
}

Acceda a los datos de la hoja

function getSheetData() {

var sheet = [Link]();

var startRow = 2; // First row of data to process


var numRows = 100; // Number of rows to process
var startCol = 1; //First column of data to process

[Link] 27
var numCols = 15; // Number of columns to process

var dataRange = [Link](startRow, startCol, numRows, numCols);

// Fetch values for each row in the Range.


var data = [Link]();

return data;
}

También puede modificar la función anterior de la siguiente manera para obtener un rango
dinámico de datos del contenido presente en la hoja:

function getDataSheet() {

sheet = [Link]();

//Get data range based on content


var dataRange = [Link]();

// Fetch values for each row in the Range.


var data = [Link]();

return data;
}

Usa la hoja de datos para enviar un correo electrónico

Dado: Una hoja de empleados que han solicitado un reembolso.

Requisito: debemos enviar un correo electrónico al empleado cuando se procese su reembolso

Por lo tanto, la hoja es la siguiente:

La función para enviar un correo electrónico es la siguiente:

function getDataSheet() {

sheet = [Link]();

[Link] 28
startRow = 2; // First row of data to process
numRows = 100; // Number of rows to process
startCol = 1; //First column of data to process
numCols = 15; // Number of columns to process

var dataRange = [Link](startRow, startCol, numRows, numCols);

// Fetch values for each row in the Range.


var data = [Link]();

return data;
}

function getMessage(name, amount) {


return "Hello " + name + ", Your reimbursement for amount " + amount + " is processed
successfully";
}

function sendEmail() {

var emailSent = "Yes";


var reimbursed = "Yes";
var emailCol = 5;

var data = getDataSheet();

for (var i = 0; i < [Link]; i++) {

var row = data[i];

var isReimbursed = row[3];


var isEmailSent = row[4];
var name = row[0];
var amount = row[2];

if(isReimbursed == reimbursed && isEmailSent != emailSent) {

var subject = "Reimbursement details";


var message = getMessage(name, amount);

var recipientEmail = row[1];

[Link](recipientEmail, subject, message);

//Sheet range starts from index 1 and data range starts from index 0
[Link](1 + i, emailCol).setValue(emailSent);
}
}
}

[Link] 29
Enviando contenido HTML en correo

En el ejemplo anterior, si queremos enviar contenido HTML como mensaje en el correo


electrónico, cree un archivo HTML yendo a Archivo -> Nuevo -> archivo HTML

Ahora puede ver un archivo HTML además de su archivo gs de la siguiente manera:

[Link] 30
Ahora, actualice el método getMessage () del ejemplo anterior de la siguiente manera:

function getMessage(name, amount) {


var htmlOutput = [Link]('Message'); // Message is the name of
the HTML file

var message = [Link]()


message = [Link]("%name", name);
message = [Link]("%amount", amount);

return message;
}

La llamada a la api de MailApp también debe cambiarse

[Link](recipientEmail, subject, message, {htmlBody : message});

Entonces todo el código será el siguiente:

[Link] 31
function getDataSheet() {

sheet = [Link]();

startRow = 2; // First row of data to process


numRows = 100; // Number of rows to process
startCol = 1; //First column of data to process
numCols = 15; // Number of columns to process

var dataRange = [Link](startRow, startCol, numRows, numCols);

// Fetch values for each row in the Range.


var data = [Link]();

return data;
}

function getMessage(name, amount) {


var htmlOutput = [Link]('Message');

var message = [Link]()


message = [Link]("%name", name);
message = [Link]("%amount", amount);

return message;
}

function sendEmail() {

var emailSent = "Yes";


var reimbursed = "Yes";
var emailCol = 5;

var data = getDataSheet();

for (var i = 0; i < [Link]; i++) {

var row = data[i];

var isReimbursed = row[3];


var isEmailSent = row[4];
var name = row[0];
var amount = row[2];

if(isReimbursed == reimbursed && isEmailSent != emailSent) {

var subject = "Reimbursement details";


var message = getMessage(name, amount);

var recipientEmail = row[1];

[Link](recipientEmail, subject, message, {htmlBody : message});

[Link](startRow + i, emailCol).setValue(emailSent);
}
}
}

Lea Google hojas MailApp en línea: [Link]


script/topic/5298/google-hojas-mailapp

[Link] 32
Capítulo 9: Hoja de cálculo Añadir menú
Sintaxis
1. addMenu (nombre, subMenus)

Parámetros

Nombre Descripción

nombre El nombre del menú a crear.

subMenus una variedad de mapas de JavaScript

Observaciones
Por lo general, deseará llamar a addMenu desde la función onOpen para que el menú se cree
automáticamente cuando se carga la hoja de cálculo.

// The onOpen function is executed automatically every time a Spreadsheet is loaded


function onOpen() {
var activeSheet = [Link]();
var menuItems = [];
// When the user clicks on "addMenuExample" then "Menu 1", the function Myfunction1 is
executed.
[Link]({name: "Menu 1", functionName: "Myfunction1"});
[Link](null); // adding line separator
[Link]({name: "Menu 2", functionName: "Myfunction2"});

[Link]("addMenuExample", menuEntries);
}

Examples
Crear un nuevo menú

Crea un nuevo menú en la interfaz de usuario de la hoja de cálculo. Cada entrada del menú
ejecuta una función definida por el usuario.

var activeSheet = [Link]();


var menuItems = [];
// When the user clicks on "addMenuExample" then "Menu 1", the function Myfunction1 is
executed.
[Link]({name: "Menu 1", functionName: "Myfunction1"});
[Link](null); // adding line separator
[Link]({name: "Menu 2", functionName: "Myfunction2"});

[Link] 33
[Link]("addMenuExample", menuEntries);

Crear menú personalizado

/*

Método: para crear un menú personalizado Esta es la primera función que se debe llamar cuando
se carga la aplicación

*/

function onOpen() {
var ui = [Link]();
// Or DocumentApp or FormApp.
[Link]('My HR')
.addItem('Send Form to All', 'sendIDPForm_All')
.addItem('Trigger IDP System', 'applyCategory')
.addToUi();
}

Lea Hoja de cálculo Añadir menú en línea: [Link]


script/topic/4253/hoja-de-calculo-anadir-menu

[Link] 34
Capítulo 10: Llamadas del cliente a Google
apps-script
Introducción
Google Appscript funciona bien como una plataforma independiente y en el formato de
complemento para documentos, hojas y formularios de Google. Sin embargo, hay ocasiones en
que un navegador cliente puede necesitar llamar a una aplicación de Google para realizar alguna
acción.

Por lo tanto, Google introdujo las solicitudes del lado del cliente a los scripts de aplicaciones de
Google. Para resolver este problema, Google introdujo las bibliotecas del lado del cliente.

Examples
Este es un ejemplo de una llamada del lado del cliente a un script de
aplicación de Google

<script src="[Link]
<script>
function start() {
// 2. Initialize the JavaScript client library.
[Link]({
'apiKey': 'YOUR_API_KEY',
// clientId and scope are optional if auth is not required.
'clientId': 'YOUR_WEB_CLIENT_ID.[Link]',
'scope': 'profile',
}).then(function() {
// 3. Initialize and make the API request.
return [Link]({
'path': '[Link]
})
}).then(function(response) {
[Link]([Link]);
}, function(reason) {
[Link]('Error: ' + [Link]);
});
};
// 1. Load the JavaScript client library.
[Link]('client', start);
</script>

Lea Llamadas del cliente a Google apps-script en línea: [Link]


script/topic/8875/llamadas-del-cliente-a-google-apps-script

[Link] 35
Capítulo 11: Script de la aplicación web de
Google para descarga automática desde
Google Drive
Introducción
Esta sencilla aplicación web de Google Script (independiente) permite que Google Drive se vuelva
a sondear para que los archivos se descarguen en la PC local del usuario. Muestra cómo usar un
script de aplicación para proporcionar la función de: 1. La interfaz de usuario (una simple en este
ejemplo) 2. La página de descarga de archivos. Para una explicación más completa de cómo
funciona, lea el Ejemplo "Cómo funciona".

Observaciones
El Web Script debe ser publicado para que funcione.

Los complementos deben estar habilitados para [Link]

Examples
[Link]

<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>

setInterval(
function ()
{
[Link]('messages').innerHTML = 'Event Timer Fetching';
[Link]
.withSuccessHandler(onSuccess)
.withFailureHandler(onFailure)
.fetchFromGoogleDrive();
}, 60000);

function callFetchGoogleDrive() {
[Link]('messages').innerHTML = 'Fetching';
[Link]
.withSuccessHandler(onSuccess)
.withFailureHandler(onFailure)
.fetchFromGoogleDrive();
}

function onSuccess(sHref)
{

[Link] 36
if(new String(sHref).valueOf() == new String("").valueOf())
{
[Link]('messages').innerHTML = 'Nothing to download';
}
else
{
[Link]('messages').innerHTML = 'Success';
[Link]('HiddenClick').href = sHref;
[Link]('HiddenClick').click(); // Must enable Pop Ups for
[Link]
}
}

function onFailure(error)
{
[Link]('messages').innerHTML = [Link];
}

</script>
</head>
<body>
<div id="messages">Waiting to DownLoad!</div>
<div>
<a id="HiddenClick" href="" target="_blank" onclick="[Link]"
style="visibility: hidden;">Hidden Click</a>
</div>
<div>
<button type="button" onclick='callFetchGoogleDrive();' id="Fetch">Fetch Now!</button>
</div>
</body>
</html>

có[Link]

function doGet(e){
var serveFile = [Link];
var id = [Link];

if(serveFile)
{
return downloadFile(id); // and Hyde
}

return [Link]('[Link]'); // Jekyll


}

function fetchFromGoogleDrive() { // Jekyll


var fileslist = [Link]("your search criteria goes here + and trashed =
false"); // the 'and trashed = false' prevents the same file being download more than once

if ([Link]()) {
var afile = [Link]();
var html = [Link]().getUrl()+"?servefile=true&id="+[Link]();
return html;
}
else
{
return '';
}

[Link] 37
}

function downloadFile(id){ // and Hyde


try
{
var afile = [Link](id);

var aname = [Link]();


var acontent = [Link]('text/plain').getDataAsString();

var output = [Link]();


[Link]([Link]);
[Link](acontent);
[Link](aname);
[Link](true);
return output;
}
catch (e) {
return [Link]('Nothing To Download')
}
}

Cómo funciona

Google Drive (Standalone) Web App para descargar automáticamente (Sondeo) archivos desde
Drive a la PC local del usuario (Carpeta de descarga).

DriveApp proporciona mecanismos para buscar y descargar archivos. Sin embargo, el mecanismo
de descarga tiene algunas limitaciones importantes debido a la arquitectura cliente / servidor que
heredó Google Apps. (No es culpa de Google)

El lado del servidor DriveApp no proporciona una función directa para descargar a la PC local
porque el servidor no tiene idea de dónde está el cliente y la descarga del archivo al servidor en sí
no tendría sentido.

El código del lado del servidor necesita un mecanismo para proporcionar al código del lado del
cliente los datos del archivo o un enlace al archivo. Se proporcionan estos dos mecanismos, pero
los datos del primero se limitan a ser utilizados directamente por el código del lado del cliente. El
cliente no tiene ningún mecanismo para guardar los datos, una vez obtenidos, en la PC local. Por
lo tanto, se puede utilizar para mostrar los datos en la propia página web.

El segundo mecanismo permite que la url de la secuencia de comandos (en sí) o la url del archivo
de Drive se devuelva. La URL del archivo de Drive no es muy útil ya que no se puede usar
directamente en el navegador del cliente para descargar el archivo. Colocar esta URL en el ancla
(y hacer clic en ella) solo da como resultado una página web que se abre pero que en realidad no
hace nada (excepto posiblemente ver el archivo en línea).

Eso deja el script url. Sin embargo, la URL del script solo proporciona el script y no el archivo.

Para iniciar una descarga, el archivo del servicio Drive debe devolverse desde la función doGet /
doPost de la secuencia de comandos del lado del servidor utilizando ContentService
createTextOutput exactamente como se muestra en las guías en línea de Google. Sin embargo,

[Link] 38
esto implica que no puede haber ningún otro elemento de UI en la página web generado por los
resultados devueltos por doGet / doPost.

Esto nos deja con una solución muy poco atractiva. Una página web en blanco sin elementos de
usuario de la interfaz de usuario que descarga una página, se cierra y requiere que se abra
manualmente cada vez que se requiera otra descarga.

Obviamente, otra página web de alojamiento podría proporcionar la IU y el enlace al script de


descarga de la aplicación web para resolver este problema.

Este script utiliza un enfoque del Dr. Jekyll y Mr Hyde para resolver este problema.

Si el script se abre sin parámetros para GET (doGet), entonces se muestra de forma
predeterminada un formulario. Esta será la condición cuando la aplicación publicada se abra por
primera vez por un usuario. La forma proporcionada en este ejemplo es extremadamente simple.

Si el script se abre con el parámetro servefile = true, entonces el script se comporta como una
descarga de archivos de Drive.

El javascript del lado del cliente contiene un mecanismo de sondeo (temporizador de eventos
setInterval) que periódicamente llama al script del lado del servidor para verificar la disponibilidad
de otro archivo para descargar.

Cuando se ejecuta el script del lado del servidor si encuentra algún archivo de Drive que coincida
con los criterios de búsqueda *, devuelve la url del script adjunto con los parámetros:

? servefile = true & id = the_id_of_the_google_drive_file

(* Los criterios de búsqueda en este ejemplo simple están codificados en la secuencia de


comandos del lado del servidor. Si es necesario, podrían pasar fácilmente del cliente al servidor).

Esta información se devuelve como una cadena al cliente a través del mecanismo reconocido con
SucursHandler.

La secuencia de comandos java del cliente luego actualiza el HREF de un ancla oculta con esta
información devuelta y luego hace clic en el ancla automáticamente.

Esto hace que se inicie otra invocación de la aplicación / script. Cuando se inicie la nueva
invocación de la aplicación, doGet detectará el parámetro de archivo de servicio y, en lugar de
devolver la interfaz de usuario, devolverá el archivo al navegador. El archivo devuelto será el
identificado por el parámetro de ID proporcionado que fue previamente devuelto por la búsqueda
descrita anteriormente.

Dado que el archivo con el ID proporcionado todavía existe, se descargará y la nueva invocación
de la aplicación se cerrará, quedando la primera invocación para repetir este proceso.

Se proporciona un botón en la interfaz simple si el usuario / probador se muestra impaciente por


esperar el temporizador, pero no es necesario y, de lo contrario, puede eliminarse.

Por supuesto, la forma simple puede extenderse para proporcionar una interfaz de usuario más

[Link] 39
rica si es necesario. Tales como proporcionar los criterios de búsqueda de archivos.

Lea Script de la aplicación web de Google para descarga automática desde Google Drive en
línea: [Link]
google-para-descarga-automatica-desde-google-drive

[Link] 40
Capítulo 12: Servicio de hoja de cálculo
Observaciones
La referencia de API oficial para el servicio de hoja de cálculo se puede encontrar en
[Link] .

Examples
Hoja

Obtener una referencia a una pestaña de hoja con nombre

var spread_sheet = [Link]();//Get active spreadsheet


var sheet_with_name_a = spread_sheet.getSheetByName("sheet_tab_name");

Obtención de la pestaña de hoja activa

var spread_sheet = [Link]();


var active_sheet = spread_sheet.getActiveSheet();

Insertar columna

var spread_sheet = [Link]();


var active_sheet = spread_sheet.getActiveSheet();
active_sheet.insertColumnAfter(1); // This inserts a column after the first column position
active_sheet.insertColumnBefore(1); // This inserts a column in the first column position
active_sheet.insertColumns(1); // Shifts all columns by one
active_sheet.insertColumns(1, 3); // Shifts all columns by three
active_sheet.insertColumnsAfter(1); // This inserts a column in the second column position
active_sheet.insertColumnsBefore(1, 5); // This inserts five columns before the first column

Insertar fila

var spread_sheet = [Link]();


var active_sheet = spread_sheet.getActiveSheet();
active_sheet.insertRowAfter(1); // This inserts a row after the first row position
active_sheet.insertRowBefore(1); // This inserts a row in the first row position
active_sheet.insertRows(1); // Shifts all rows by one
active_sheet.insertRows(1, 3); // Shifts all rows by three
active_sheet.insertRowsAfter(1); // This inserts a row in the second row position
active_sheet.insertRowsBefore(1, 5); // This inserts five rows before the first row

Valor de celda

var spread_sheet = [Link]();


var active_sheet = spread_sheet.getActiveSheet();
var cell = [Link](1, 1);
var cell_value = [Link]();

[Link] 41
[Link](100);

Copiar celdas

var spread_sheet = [Link]();


var active_sheet = spread_sheet.getActiveSheet();
var rangeToCopy = active_sheet.getRange(1, 1, [Link](), 5);
[Link]([Link](1, 6));

Fórmula

var spread_sheet = [Link]();


var active_sheet = spread_sheet.getActiveSheet();
var range = active_sheet.getRange("B5");
var formula = [Link]()
[Link]("=SUM(B3:B4)");

Copie un valor de una hoja a la hoja actual

Imagine que tenemos una hoja de cálculo de Google por separado y necesitamos obtener el valor
de la celda B2 a la celda D5 en su hoja actual.

function copyValueandPaste()
{
var source = [Link]('spread sheet id is here'); //Separate spreadsheet
book
var sourcesheet = [Link]('Sheet1'); //Sheet tab with source data
var sourceCellValue = [Link]('B2').getValue(); // get B2 cell value

var thisBook = [Link](); // Active spreadsheet book


var thisSheet = [Link]('Sheet1'); // Target sheet
[Link]('D5').setValue(sourceCellValue); //Set value to target sheet D5 cell
}

Puede encontrar el ID de la hoja de cálculo desde su URL.

Obtener la última fila en una sola columna

function lastRowForColumn(sheet, column){


// Get the last row with data for the whole sheet.
var numRows = [Link]();

// Get all data for the given column


var data = [Link](1, column, numRows).getValues();

// Iterate backwards and find first non empty cell


for(var i = [Link] - 1 ; i >= 0 ; i--){
if (data[i][0] != null && data[i][0] != ""){
return i + 1;
}
}
}

[Link] 42
Inserción de matrices como filas

Insertar una fila en la parte inferior de una hoja de cálculo es fácil:

var someSheet = [Link]().getSheets()[0];


[Link](["Frodo", "Baggins", "Hobbit", "The Shire", 33]);

Tenga en cuenta que esto agregará la fila después de la última fila no vacía .

Insertar una fila en algún lugar en el medio es un poco más de trabajo:

var someSheet = [Link]().getSheets()[0];

var newRowIndex = 2;
var row = ["Gandalf", "?", "Wizard", "?", 2019];
[Link](newRowIndex);
// getRange(row, col, numRows, numCols)
[Link](newRowIndex, 1, 1, [Link]).setValues([row]); // Note 2D array!

Gran parte de este código inútil se puede abstraer en una función auxiliar:

function insertRowBefore(sheet, rowIndex, rowData) {


[Link](rowIndex);
[Link](rowIndex, 1, 1, [Link]).setValues([rowData]);
}

Lo que reduce nuestro ejemplo a solo:

var someSheet = [Link]().getSheets()[0];


insertRowBefore(someSheet, 2, ["Gandalf", "?", "Wizard", "?", 2019]);

Lea Servicio de hoja de cálculo en línea: [Link]


script/topic/2688/servicio-de-hoja-de-calculo

[Link] 43
Capítulo 13: Servicio DriveApp
Observaciones
Los tipos Mime de Google no se pueden usar para el tercer parámetro de Tipos Mime. El uso de
un tipo Mime de Google generará un error que indica:

No se puede usar "[Link] ()" para crear tipos MIME de Google. Por favor, utilice el
servicio de unidad avanzada

MimeType.GOOGLE_APPS_SCRIPT

MimeType.GOOGLE_DOCS

MimeType.GOOGLE_DRAWINGS

MimeType.GOOGLE_FORMS

MimeType.GOOGLE_SHEETS

MimeType.GOOGLE_SLIDES

Examples
Crear una nueva carpeta en la unidad raíz de Google

function createNewFolderInGoogleDrive() {
var folderName,newFolder;//Declare variable names

folderName = "Test Folder " + new Date().toString().slice(0,15);//Create a new folder name


with date on end
newFolder = [Link](folderName);//Create a new folder in the root drive
};

Crear nuevo archivo en Google Drive de un determinado tipo de Mime

function createGoogleDriveFileOfMimeType() {
var content,fileName,newFile;//Declare variable names

fileName = "Test File " + new Date().toString().slice(0,15);//Create a new file name with
date on end
content = "This is the file Content";

newFile = [Link](fileName,content,[Link]);//Create a new file in


the root folder
};

Crear un nuevo archivo de texto en la carpeta de la unidad raíz de Google

[Link] 44
function createGoogleDriveTextFile() {
var content,fileName,newFile;//Declare variable names

fileName = "Test Doc " + new Date().toString().slice(0,15);//Create a new file name with
date on end
content = "This is the file Content";

newFile = [Link](fileName,content);//Create a new text file in the root folder


};

Crear un nuevo archivo en Google Drive desde un blob

function createGoogleDriveFileWithBlob() {
var blob,character,data,fileName,i,L,max,min,newFile,randomNmbr;//Declare variable names

fileName = "Test Blob " + new Date().toString().slice(0,15);//Create a new file name with
date on end

L = 500;//Define how many times to loop


data = "";
max = 126;
min = 55;

for (i=0;i<L;i+=1) {//Loop to create data


randomNmbr = [Link]([Link]()*(max-min+1)+min);//Create a random number
//[Link]('randomNmbr: ' + randomNmbr);
character = [Link](randomNmbr);

//[Link]('character: ' + character);//Print the character to the Logs


data = data + character;
};

blob = [Link](data, MimeType.PLAIN_TEXT, fileName);//Create a blob with random


characters

newFile = [Link](blob);//Create a new file from a blob

[Link](fileName);//Set the file name of the new file


};

Obtenga todas las carpetas: coloque las carpetas en un token de


continuación y luego recupérelo

function processGoogleDriveFolders() {
var arrayAllFolderNames,continuationToken,folders,foldersFromToken,thisFolder;//Declare
variable names

arrayAllFolderNames = [];//Create an empty array and assign it to this variable name

folders = [Link]();//Get all folders from Google Drive in this account


continuationToken = [Link]();//Get the continuation token

[Link](18000);//Pause the code for 3 seconds

foldersFromToken = [Link](continuationToken);//Get the original


folders stored in the token
folders = null;//Delete the folders that were stored in the original variable, to prove that

[Link] 45
the continuation token is working

while ([Link]()) {//If there is a next folder, then continue looping


thisFolder = [Link]();//Get the next folder
[Link]([Link]());//Get the name of the next folder
};

[Link](arrayAllFolderNames);//print the folder names to the Logs


};

Obtenga todos los archivos, póngalos en un token de continuación, luego


recupérelos

function processGoogleDriveFiles() {
var arrayAllFileNames,continuationToken,files,filesFromToken,fileIterator,thisFile;//Declare
variable names

arrayAllFileNames = [];//Create an empty array and assign it to this variable name

files = [Link]();//Get all files from Google Drive in this account


continuationToken = [Link]();//Get the continuation token

[Link](18000);//Pause the code for 3 seconds

filesFromToken = [Link](continuationToken);//Get the original files


stored in the token
files = null;//Delete the files that were stored in the original variable, to prove that the
continuation token is working

while ([Link]()) {//If there is a next file, then continue looping


thisFile = [Link]();//Get the next file
[Link]([Link]());//Get the name of the next file
};

[Link](arrayAllFileNames);
};

Lea Servicio DriveApp en línea: [Link]


driveapp

[Link] 46
Capítulo 14: Servicio DriveApp - Archivos por
tipo y cadena de búsqueda
Parámetros

Nombre del parámetro Usar para

cadena de búsqueda la cadena que se encuentra en el nombre del archivo

Examples
Obtenga archivos por tipo de archivo con cadena coincidente en nombre de
archivo

Obtenga todos los formularios de Google con la palabra "Sin título" en el nombre del archivo.

function mainSearchFunction(searchStr) {
var fileInfo,arrayFileIDs,arrayFileNames,arrayOfIndexNumbers,
allFileIDsWithStringInName,i,searchStr,thisID;//Declare variables

if (!searchStr) {
searchStr = "Untitled";//Assign a string value to the variable
};

fileInfo = getFilesOfType();//Run a function that returns files information


arrayFileNames = fileInfo[1];//Get the array of file names
arrayOfIndexNumbers = searchFileNamesForString(arrayFileNames,searchStr);

//[Link]('searchStr: ' + searchStr)


//[Link](arrayOfIndexNumbers)

allFileIDsWithStringInName = [];
arrayFileIDs = fileInfo[0];

for (i=0;i<[Link];i+=1) {
thisID = arrayFileIDs[arrayOfIndexNumbers[i]];
[Link](thisID);
};

[Link](allFileIDsWithStringInName)
};

function getFilesOfType() {
var allFormFiles,arrFileName,arrFileID,arrFileUrls,thisFile;

allFormFiles = [Link](MimeType.GOOGLE_FORMS);
arrFileName = [];
arrFileID = [];
arrFileUrls = [];

while ([Link]()) {

[Link] 47
thisFile=[Link]();
[Link]([Link]());
[Link]([Link]());
[Link]([Link]());
};

//[Link](arrFileName)
return [arrFileID,arrFileName];
};

function searchFileNamesForString(arrayFileNames,searchStr) {
var arrayIndexNumbers,i,L,thisName;

arrayIndexNumbers = [];

L = [Link];

for (i=0;i<L;i+=1){
thisName = arrayFileNames[i];
[Link](thisName);
[Link]('[Link](searchStr): ' + [Link](searchStr));

if ([Link](searchStr) !== -1) {


[Link](i);
};
};

return arrayIndexNumbers;
};

Lea Servicio DriveApp - Archivos por tipo y cadena de búsqueda en línea:


[Link]
cadena-de-busqueda

[Link] 48
Capítulo 15: SpreadsheetApp Active Sheet
Observaciones
Método: getActive ()

Tipo de devolución: Hoja de cálculo

Examples
getActive () - Obtener hoja de cálculo activa

Esto devuelve la hoja de cálculo activa actualmente, o nula si no hay ninguna.

var currentSheet = [Link]();


var url = [Link]();
[Link]( url );

Lea SpreadsheetApp Active Sheet en línea: [Link]


script/topic/5861/spreadsheetapp-active-sheet

[Link] 49
Creditos
S.
Capítulos Contributors
No

Albert Portnoy, Community, Douglas Gaskell, iJay, MShoaib91,


Empezando con
1 Rubén, Saloni Vithalani, Shyam Kansagra, Spencer Easton,
google-apps-script
sudo bangbang, Supertopoz

Aplicaciones Script
2 Douglas Gaskell
Web Apps

Crear una función


3 personalizada para Francky_V, Joshua Dawson, Pierre-Marie Richard, Rubén
las hojas de Google

4 DriveApp Brian, Kos, nibarius, Sandy Good, Wolfgang

DriveApp -
5 Sandy Good
getFileById (id)

Firebase y
6 AppScript: Joseba, Vishal Vishwakarma
Introducción

7 GmailApp nibarius

Google hojas Bhupendra Piprava, Brian, Jordan Rhea, Kos, nibarius, Saloni
8
MailApp Vithalani

Hoja de cálculo
9 Bishal, iJay, nibarius
Añadir menú

Llamadas del cliente


10 Supertopoz
a Google apps-script

Script de la
aplicación web de
11 Google para Walter
descarga automática
desde Google Drive

Servicio de hoja de
12 cdrini, iJay, nibarius, Sandy Good, sudo bangbang
cálculo

13 Servicio DriveApp Sandy Good

14 Servicio DriveApp - nibarius, Sandy Good

[Link] 50
Archivos por tipo y
cadena de búsqueda

SpreadsheetApp
15 iJay
Active Sheet

[Link] 51

Common questions

Con tecnología de IA

Los scripts independientes no están vinculados a ninguna aplicación de Google específica y se pueden crear accediendo a script.google.com. Estos scripts se pueden usar para automatizar Google Apps sin estar vinculados a documentos, hojas o formularios específicos. Por otro lado, los scripts vinculados a contenedor están asociados con aplicaciones de Google específicas como Google Docs o Google Sheets, y se crean a través de la opción tools > Script editor en la aplicación correspondiente. Los scripts vinculados ofrecen funcionalidades adicionales como cuadros de diálogo, menús y barras laterales, y se utilizan comúnmente para desarrollar complementos de Google .

Para crear funciones personalizadas en Google Sheets utilizando Google Apps Script, se debe usar el editor de secuencias de comandos y definir la función con el comentario @customfunction antes de la declaración de la función. Este tipo de comentario permite que la función aparezca en el autocompletado de las fórmulas de las celdas de Google Sheets. Una vez definida, la función personalizada puede ser utilizada directamente en las fórmulas de las celdas en las hojas de Google al igual que las funciones incorporadas .

Google Apps Script se ejecuta en la infraestructura de Google, lo que significa que los scripts no dependen del cliente y se ejecutan completamente en los servidores de Google. Esto implica que funcionalidades del lado del cliente como la manipulación del DOM o la API de Window no están disponibles para los scripts de Apps Script. Sin embargo, esta ejecución centralizada garantiza que los scripts se ejecuten con seguridad y sin necesidad de configuración de servidores por parte del usuario. Además, permite la autenticación integrada a través de OAuth2 sin requerir configuración adicional .

Para implementar un control de errores al crear una carpeta en Google Drive con Google Apps Script, se puede crear una función que verifique si el parámetro del nombre de la carpeta está definido antes de intentar crearla. Si no está definido, se envía un correo electrónico al usuario responsable notificando el error. Este enfoque preventivo garantiza que el script maneje de manera adecuada la falta de parámetros necesarios, evitando fallas que podrían detener la ejecución del script .

El uso del token de continuación es importante al procesar archivos o carpetas en Google Drive con Apps Script porque permite manejar grandes conjuntos de datos que no pueden ser procesados en una sola ejecución debido a restricciones de memoria o tiempo de ejecución. Esto es especialmente útil cuando se necesita iterar a través de una gran cantidad de archivos o carpetas. Mediante el uso de un token de continuación, el usuario puede pausar y luego reiniciar la iteración desde donde se quedó, sin perder el estado del procesamiento previo, lo cual asegura una ejecución eficiente y sin errores .

Google Apps Script ofrece dos métodos principales para interactuar con Gmail: GmailApp y MailApp. GmailApp proporciona acceso completo a la bandeja de entrada de Gmail, permitiendo leer, buscar y obtener adjuntos de correos electrónicos. Por su parte, MailApp está enfocado únicamente en el envío de correos, sin acceso a la bandeja de entrada. Debido a esta capacidad adicional, los scripts que utilizan GmailApp tienen más probabilidades de requerir nuevas autorizaciones de usuario en comparación con MailApp, que es más simple en su funcionalidad .

Para enviar un correo electrónico con MailApp en Google Apps Script, primero se debe definir el asunto, el mensaje y la dirección del destinatario. Luego, se utiliza la función sendEmail proporcionada por MailApp, pasando los tres parámetros definidos anteriormente. MailApp permite enviar correos electrónicos sin necesidad de acceder a la bandeja de entrada del usuario y limita el envío de correos electrónicos a una cuota diaria basada en el tipo de cuenta de Google .

Para que un script de Google Apps funcione como una aplicación web, debe incluir una función doGet() o doPost() que actúe como manejadora de solicitudes HTTP GET o POST. La función debe devolver un objeto de tipo HtmlOutput del HTML Service o un objeto de tipo TextOutput del Content Service. Estas funciones permiten que la aplicación web presente una interfaz de usuario en el navegador y se integre con otras aplicaciones de Google mediante el uso de servicios web .

La autenticación OAuth2 en Google Apps Script ocupa un rol fundamental al permitir que los scripts accedan a las APIs de Google de manera segura y autorizada. Esta autenticación integrada simplifica el proceso tanto para usuarios como para desarrolladores, eliminando la necesidad de implementar configuraciones o códigos complicados para gestionar permisos. OAuth2 garantiza que los scripts se ejecuten con las credenciales adecuadas, proporcionando un nivel adicional de seguridad al proteger los datos y aplicaciones de accesos no autorizados .

Para abstraer funciones repetitivas al insertar filas en Google Sheets mediante Google Apps Script, se puede crear una función auxiliar genérica, como insertRowBefore, que reciba como parámetros la hoja de cálculo, el índice de la fila y los datos de la fila. Esta función inserta una nueva fila antes del índice especificado y establece los valores proporcionados. Al crear esta función auxiliar, se reduce la repetición de código, permitiendo una inserción eficiente y simplificada de nuevas filas en distintas partes del flujo de trabajo del script .

google-apps-script
#google-
apps-script
Tabla de contenido
Acerca de
1
Capítulo 1: Empezando con google-apps-script
2
Observaciones
2
Examples
2
Instalación o config
Observaciones
19
Examples
19
Obtenga un archivo de Google Drive utilizando el ID de archivo
19
Capítulo 6: Firebase y AppScri
Examples
33
Crear un nuevo menú
33
Crear menú personalizado
34
Capítulo 10: Llamadas del cliente a Google apps-script
35
Intr
Examples
47
Obtenga archivos por tipo de archivo con cadena coincidente en nombre de archivo
47
Capítulo 15: SpreadsheetApp A
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version 
from: google-apps
Capítulo 1: Empezando con google-apps-
script
Observaciones
La descripción oficial de Google Apps Script se publica en http:/
pero no aparecen en la interfaz de la aplicación-script. Por ejemplo, Marketplace SDK debe estar 
activado en la consola de d
(https://i.stack.imgur.com/9kOsX.png) (https://i.stack.imgur.com/FENhy.png)Las funciones Inshort, doGet() y doPost() funcion
principalmente para automatizar y ampliar Google Apps. Apps Script se ejecuta exclusivamente 
en la infraestructura de Google

También podría gustarte