tutorial script google examples example code apps app aplicacion google-apps-script google-sheets google-docs row-number

google apps script - script - Encuentre el valor de coincidencia de celdas y el número de retorno



google apps script tutorial (2)

La hoja del empleado contiene el nombre del empleado en la celda C2. El nombre del empleado también debe estar en la hoja de datos en el rango B3: B153.

¿Cómo puedo obtener el número de la celda en la hoja de datos que coincida con el nombre del empleado?

Probé el siguiente script pero no parece funcionar.

var Sheet = SpreadsheetApp.getActive(); var Employeesheet = Sheet.getSheetByName(''Employee'') var DataSheet = Sheet.getSheetByName(''Data''); var Column = Sheet.getRange(3,2,151,1); var Values = column.getValues(); var Row = 0; while ( Values[Row] && Values[Row][0] !=(EmployeeSheet.getRange(2,3,1,1).getValue()) ) { Row++; } if ( Values[Row][0] === (EmployeeSheet.getRange(2,3,1,1).getValue()) ) return Row+1; else return -1; }


Aqui el codigo

function rowOfEmployee(){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var data = sheet.getDataRange().getValues(); var employeeName = sheet.getRange("C2").getValue(); for(var i = 0; i<data.length;i++){ if(data[i][1] == employeeName){ //[1] because column B Logger.log((i+1)) return i+1; } } }

Cuando desee realizar este tipo de búsqueda, es mejor recuperar los datos con sheet.getDataRange (). GetValues ​​() porque en este caso obtendrá datos como una tabla de valores, esto es más rápido. Cuando usa el estándar EmployeeSheet.getRange (2,3,1,1) .getValue (), de hecho, recupera un objeto que necesita más tiempo para ser procesado y cada vez que consulta la hoja de cálculo.

En mi ejemplo, solo hice una consulta para recuperar todos los datos en lugar de una consulta para recuperar una información cada vez.

Stéphane


Prefiero cargar todos los valores en una matriz una vez que se abre la hoja, y luego usar Array.indexOf () para buscar el índice de la cadena coincidente. Creo que esta solución tendrá menos tiempo de ejecución que otras soluciones.

function updateValues(){ dataRangeSearch = activeSheet.getRange(1,1,activeSheet.getLastRow()); dataSearch = dataRangeSearch.getValues().reduce(function (a, b) { return a.concat(b); });; } updateValues(); function findValue(fieldName){ var row = dataSearch.indexOf(fieldName); if (row == -1){ // Variable could not be found SpreadsheetApp.getUi().alert(''I couldn/'t find field name "''+fieldName+''"''); return ""; } else { return activeSheet.getRange(row+1,2).getValue(); //Return the value of the field to the right of the matched string } }