En Google Sheets "Apps Script" definí una función personalizada que recibe un formato y algunos valores, luego reemplaza los valores en los marcadores de posición del formato y los devuelve.
function PRINT_DETAILS(format, productName, quantity) { /* format expects a string with placeholders like: "{productName} {quantity}" product: expects a string quantity: expects an integer */ }En la "tabla" de Productos hay las siguientes columnas: nombre, cantidad, precio, etc. Cada uno de ellos tiene su propio rango con nombre.
Definí una columna de "impresión" donde llamo a la función de esta manera: = PRINT_DETAILS("{productName} {quantity}"; Products.Name; Products.Quantity)
El problema es que mi función recibe todo el rango con nombre, y no solo el valor de celda de la misma fila. es decir, estoy recibiendo todos los nombres de productos y todas las cantidades de productos...
Utilicé con éxito rangos con nombre como valores de celda de muchas maneras: agregándolos, en condiciones "IF", operador de concatenación "&", etc. Incluso en llamadas de funciones estándar.
Por eso creo que habría una manera de hacer lo mismo en las funciones personalizadas.
No me gustaría sacrificar la legibilidad usando referencias de celda como A1 o algo así.
Así que estoy buscando una manera de restringir los argumentos u obtener los valores deseados de una manera no demasiado complicada. Además, si pudiéramos echar un vistazo al código fuente de Google Sheets, tal vez esas funciones estándar también estén implementadas en JavaScript y ya tengan esto resuelto.
Descripción
Excel tiene una función en la que un valor de un rango con nombre se puede pasar a una fórmula personalizada correspondiente a la fila en la que se encuentra la fórmula. Desafortunadamente, Google Sheets no tiene la función. En su lugar, debe obtener el número de fila de la fórmula.
Tenga en cuenta que esto supone que los rangos con nombre comienzan en la fila 1 y las fórmulas están en esa misma fila en cualquier hoja.
Gracias a Mike Steelson he modificado ligeramente el guión para mejorarlo. Pero no la captura de pantalla.
=PRINT_DETAILS("{productName} {quantity}",Products.Name,Products.Quantity)capturas de pantalla
Guion
function PRINT_DETAILS(format,productName,quantity) { try { var row = SpreadsheetApp.getActiveRange().getRow(); return [productName[row-1],quantity[row-1]]; } catch(err) { return err.message; } }Referencia