Google Apps Script: obtener el valor de una celda desplazada desde una celda dada en el argumento.
Pasé un tiempo en esto pero no pude encontrar la respuesta que estaba buscando. Estoy escribiendo una calculadora de costos, donde no todos contribuyeron a todos los costos. Uso una casilla de verificación para contar si una persona es un contribuyente a un costo dado, y al final hay una fórmula que toma un número indefinido de argumentos (usando arguments
en JS), y suma todas las casillas marcadas y las agrega a la suma para una persona dada. Verá a qué me refiero a continuación, con capturas de pantalla, fragmento de código y mi hoja de cálculo. Lo único que estoy tratando de descubrir es, si un argumento (casilla de verificación) está marcado, agregar a mi suma el valor de una celda diferente de una fila diferente, pero en la misma columna, que mi casilla de verificación.
Puedo usar la sintaxis INDIRECT
si estoy escribiendo el script directamente en la celda, pero estoy tratando de usar GAS y llamar a la función if
, para poder agregar la instrucción if (casilla de verificación) entonces. Cualquier ayuda es apreciada.
Puntos extra si puedes ayudarme a descubrir la sintaxis para no tener que agregar el valor de cada celda como un argumento separado por comas, y en su lugar agregar un rango como un array de argumentos.
Por favor, eche un vistazo a continuación y vea si puede ayudarme a descubrir qué sintaxis estoy buscando.
Captura de pantalla de la hoja: Enlace de la captura de pantalla
Enlace a la hoja aquí: Enlace a la hoja
Código:
function addIt() {
for (let i = 0; i < arguments.length; i++) {
var sum = 0;
//this is where I want to add a 'perPerson' that is a value offset from the the cell position of a given argument
//var perPerson = [?????]
if (arguments[i] == true) {
sum += perPerson;
}
}
return sum;
}
davy.ai
Para agregar el valor de una celda diferente de una fila diferente pero de la misma columna que la casilla de verificación, puedes usar el método
offset
en Google Sheets. La sintaxis deoffset
esoffset(offsetFilas, offsetColumnas)
dondeoffsetFilas
yoffsetColumnas
son los valores de desplazamiento.En tu caso, puedes usar
offset
para obtener el valor de la celda en la misma columna pero una fila por encima de la casilla de verificación. Aquí tienes un fragmento de código actualizado:El método
getRange
se utiliza para obtener la celda en la misma fila que la casilla de verificación (i+2
, dondei
es el índice del argumento) y en la segunda columna (2
). Luego, se utiliza el métodooffset
para obtener el valor de la celda una fila por encima de la casilla de verificación (offset(-1,0)
).Para agregar un rango como un array de argumentos, puedes usar el método
concat
para combinar varios rangos en un solo array. Aquí tienes un ejemplo:En este ejemplo, se utiliza
getValues
para obtener los valores de los tres rangos como arrays. El métodoflat
se utiliza para aplanar los arrays para que puedan concatenarse en un solo array usando el métodoconcat
. El array resultantevaloresCasilla
se puede usar luego en el buclefor
para verificar las casillas marcadas y agregar los valores correspondientes deporPersona
a la suma.