es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La función de Google Apps Script (Javascript) no se aplicará en la última hoja de cálculo.

Estoy usando Google Apps Script (que utiliza JavaScript) en un documento de hoja de cálculo de Google para llevar a cabo un proceso de recopilación, limpieza y extracción de datos (a CSV). Todo el script funciona bien a excepción de una de las funciones (ver código a continuación).

Por alguna razón, parece que no se aplica a la última hoja de trabajo en la hoja de cálculo de Google o al último elemento almacenado en la matriz “sheets”.

Una vez que llega al último elemento de la matriz “sheets”, insertará las dos nuevas columnas (“client_id” y “client_name”), pero realmente no establecerá los valores respectivos de estas dos columnas. Por ejemplo, si “client_id = 6” y “client_name = "Amazon"”, estos dos valores deberían insertarse por fila de datos en las respectivas columnas para esa hoja de trabajo, pero no lo hacen.

Luego continuará con el resto del código, creando los archivos CSV y eliminando las columnas recién agregadas según corresponda.

Solución temporal (no ideal) #1: si inserto una hoja de trabajo en blanco y la coloco al final, se aplicará en realidad a todas las hojas de trabajo útiles antes que ella, lo que resuelve el problema, sin embargo, no es una solución eficiente.

Solución temporal #2: estaba pensando en reescribir el código como sigue:

De esto (original): “for (let i = 0; i < sheets.length; i++) { … }”

A esto (nuevo): “for (let i = 0; i <= sheets.length; i++) { … }” con una declaración “if” anidada que dice algo así como “si i = sheets.length, no hacer nada — de lo contrario, hacer lo usual”.

Todavía necesito probar esto, pero nuevamente, se siente ineficiente.

Código actual:

/* Agrega dos columnas, una para el ID del cliente y otra para el nombre del cliente a cada fila.
Las columnas se insertarán justo antes del proceso de extracción de datos y luego se eliminarán después. */

function insertClientIDsAndNames(client_id, client_name, spreadsheet_id) {
// todas las hojas de trabajo a las que se aplicará esta función
var spreadsheet = SpreadsheetApp.openById(spreadsheet_id);
var sheets = [];

// recopila todas las hojas de trabajo
for (let i = 0; i < spreadsheet.getSheets().length; i++) {
sheets.push(spreadsheet.getSheets()[i].getSheetName());
}

for (let i = 0; i < sheets.length; i++) {
var sheet = spreadsheet.getSheetByName(sheets[i]);

// inserta dos nuevas columnas al comienzo de la hoja de trabajo
sheet.insertColumns(1, 2);

// inserta los nombres de encabezado de columna
sheet.getRange(1, 1).setValue(&quot;client_id&quot;);
sheet.getRange(1, 2).setValue(&quot;client_name&quot;);

// devuelve la posición de la última fila/columna que tiene contenido
var lastRow = sheet.getLastRow();

var range = sheet.getRange(2, 1, lastRow, 2);
var values = range.getValues();

// da formato al rango como texto sin formato
range.setNumberFormat(&#39;@STRING@&#39;);

// establece el ID del cliente
for (let i = 1; i &lt; values.length; i++) {
  sheet.getRange(i + 1, 1).setValue(client_id);
}

// establece el nombre del cliente
for (let i = 1; i &lt; values.length; i++) {
  sheet.getRange(i + 1, 2).setValue(client_name);
}

}

// crea los archivos CSV
dataExtractAll(spreadsheet_id);

// elimina las dos nuevas columnas que se crearon
for (let i = 0; i < sheets.length; i++) {
var sheet = spreadsheet.getSheetByName(sheets[i]);
sheet.deleteColumns(1, 2);
}
};

Cualquier ayuda sería genial, ya que siento que es una solución simple y no puedo verla por alguna razón!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema que se presenta involucra un Script de Google Apps que utiliza JavaScript para extraer, depurar y extraer datos de un documento de hojas de cálculo de Google a un archivo CSV. El script funciona bien excepto por una función específica que hace que no se aplique al último trabajo en la Hoja de cálculo de Google o al último elemento almacenado en la matriz de hojas de cálculo.

    La función debe insertar dos nuevas columnas para el identificador de cliente y el nombre del cliente en cada fila y establecer los valores respectivos para estas dos columnas. Sin embargo, cuando llega al último elemento en la matriz de hojas de cálculo, inserta las dos nuevas columnas pero no establece los valores para ellas. Las soluciones propuestas implican insertar una hoja de trabajo en blanco y colocarla al final o reescribir el código con una declaración if anidada.

    El código actual para la función se incluye en la publicación. Cualquier ayuda para resolver el problema sería bienvenida.

Comments are closed.