Fictizia / Curso-JS-para-desarrolladores-web_ed10

FICTIZIA » Curso de JavaScript para desarrolladores web — 10ª Edición
https://fictizia.com/formacion/curso-javascript
GNU General Public License v3.0
17 stars 8 forks source link

Duda - Google App Script #20

Closed fergill closed 6 years ago

fergill commented 6 years ago

Hola @UlisesGascon , ¿qué tal?

Estoy intentando crear un script que funcione como generador de links en Google Docs.

Creo un spreadsheet nuevo, pongo 3 valores en la primera columna:

KIOTO 7101 J3L C3 53 KIOTO 7101 J3L C3 54 KIOTO 7101 J3L C3 55

Luego voy a Herramienta > Editor de código y pongo esta función. Lo que hace es formatear el texto ofrecido para crear links:

function myFunction() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// When the "numRows" argument is used, only a single column of data is returned.
var range = sheet.getRange(1, 1, 3);
var values = range.getValues();

// Prints 3 values from the first column, starting from row 1.
for (var row in values) {
  for (var col in values[row]) {

    var valores = values[row][col];
    var url = "https://www.123.es/producto/"
    var barra = "/";
    var res = (url.concat(((valores.toLowerCase()).split(" ")).join("-"))).concat(barra);
    Logger.log(res) ;
  }

}

}

Al añadir "=myFunction()" en la primera línea de la segunda columna, funciona, pero no escala el resultado a las demás líneas. Sin embargo, el resultado sale bien en el Logger, por lo que no sé qué puede estar pasando. Google usa JavaScript para eso. ¿Tendrías alguna idea de por qué no funciona bien ese script?

Te paso el enlace:

https://docs.google.com/spreadsheets/d/1aFmZxMDzOcIqugcwkEXRuy81qDAKkcrl0A9qXxPsGE0/edit?usp=sharing

Mil graciass

UlisesGascon commented 6 years ago

Hola @fergill !

Perdón por el retraso en contestar pero he estado fuera de Madrid :-)

En principio creo que solo necesitas reajustar un par de cosas de la función. Por un lado necesitas gestionar el Input y el return y gestionar valor por valor y no como una cadena de valores (bucles).

script

function DOUBLE(input) {
  return input * 2;
}

Formula en la columna

=DOUBLE(A1)

Nota: Puedes no enfocarlo asi y generar todos los valores de la columna, pero necesitas añadir una logica distinta basada en triggers (actuadores), Documentación.

fergill commented 6 years ago

@UlisesGascon ,

Sin problemas.

¡Ahora funciona todo bien!

Mil gracias por echar un vistazo al código.