valores valor una tabla seleccionada obtener numero filas fila celda javascript google-apps-script google-spreadsheet

javascript - una - obtener valor celda datatable jquery



Cómo obtener valores de fila y columna de A1Notation (1)

Escribir guiones para Google Spreadsheets puede ser difícil a veces, porque los métodos de Google Spreadsheet que toman números de fila y columna usan indexación basada en 1, mientras que los arreglos de Javascript usan 0.

En este ejemplo, la celda A2 tiene una row == 2 y una column == 1 . Los métodos de SpreadsheetApp invierten la columna y la fila de aquellos en A1Notation, por lo que estos dos rangos son equivalentes:

var range1 = sheet.getRange("A2"); var range2 = sheet.getRange(2, 1);

Una vez que leo el contenido de una hoja en una matriz, las cosas vuelven a ser diferentes.

var ss = SpreadsheetApp.getActive(); var sheet = ss.getActiveSheet(); var data = sheet.getDataRange().getValues();

Después de eso, el valor que estaba en la celda A2 en mi hoja de cálculo está en los data[1][0] . La fila y la columna están en el mismo orden que la API de SpreadsheetApp, pero cada una es 1 menos.

Las respuestas a muchas preguntas aquí ( ejemplo ) se han reducido al desajuste de estas diferentes formas de indexación. El código que está lleno de instrucciones row+1 y col-1 puede ser difícil de depurar.

Finalmente: si conozco la referencia de una celda en A1Notation, diga AZ342 , ¿cómo puedo averiguar los valores de índice correctos que corresponden a esa celda en la matriz 2D, data , obtenidos del rango de datos completo?


Obviamente, puedes tener mucho cuidado con el seguimiento de los lugares en los que estás usando cualquier tipo de indexación, y estarás bien.

Pero sería más fácil hacer algo como esto:

var importantCell = "AZ342"; var cellIndexConverted = cellA1ToIndex( importantCell ); var data[cellIndexConverted.row][cellIndexConverted.col] = "Some new value";

ConvertA1.gs

Aquí hay tres funciones de ayuda para simplificar la conversión de A1Notation.

Estas funciones de ayuda también están disponibles como una esencia .

/** * Convert a cell reference from A1Notation to 0-based indices (for arrays) * or 1-based indices (for Spreadsheet Service methods). * * @param {String} cellA1 Cell reference to be converted. * @param {Number} index (optional, default 0) Indicate 0 or 1 indexing * * @return {object} {row,col}, both 0-based array indices. * * @throws Error if invalid parameter */ function cellA1ToIndex( cellA1, index ) { // Ensure index is (default) 0 or 1, no other values accepted. index = index || 0; index = (index == 0) ? 0 : 1; // Use regex match to find column & row references. // Must start with letters, end with numbers. // This regex still allows induhviduals to provide illegal strings like "AB.#%123" var match = cellA1.match(/(^[A-Z]+)|([0-9]+$)/gm); if (match.length != 2) throw new Error( "Invalid cell reference" ); var colA1 = match[0]; var rowA1 = match[1]; return { row: rowA1ToIndex( rowA1, index ), col: colA1ToIndex( colA1, index ) }; } /** * Return a 0-based array index corresponding to a spreadsheet column * label, as in A1 notation. * * @param {String} colA1 Column label to be converted. * * @return {Number} 0-based array index. * @param {Number} index (optional, default 0) Indicate 0 or 1 indexing * * @throws Error if invalid parameter */ function colA1ToIndex( colA1, index ) { if (typeof colA1 !== ''string'' || colA1.length > 2) throw new Error( "Expected column label." ); // Ensure index is (default) 0 or 1, no other values accepted. index = index || 0; index = (index == 0) ? 0 : 1; var A = "A".charCodeAt(0); var number = colA1.charCodeAt(colA1.length-1) - A; if (colA1.length == 2) { number += 26 * (colA1.charCodeAt(0) - A + 1); } return number + index; } /** * Return a 0-based array index corresponding to a spreadsheet row * number, as in A1 notation. Almost pointless, really, but maintains * symmetry with colA1ToIndex(). * * @param {Number} rowA1 Row number to be converted. * @param {Number} index (optional, default 0) Indicate 0 or 1 indexing * * @return {Number} 0-based array index. */ function rowA1ToIndex( rowA1, index ) { // Ensure index is (default) 0 or 1, no other values accepted. index = index || 0; index = (index == 0) ? 0 : 1; return rowA1 - 1 + index; }