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.

Google Apps Script (Hojas de cálculo) – seleccionar una matriz en una hoja de cálculo basándose en una condición en las celdas.

Estoy intentando seleccionar un array de hojas de cálculo de Google para crear eventos en el calendario de Google basados en eso. El fragmento de código a continuación funciona bien y cumple con su función. Pero quiero poder seleccionar solo el rango que tenga el valor “select” en su columna D.
Sé que probablemente sea una respuesta muy sencilla, pero soy nuevo en JS.

“`
function calendarSync() {
var spreadSheet = SpreadsheetApp.getActiveSheet;
var eventCal = CalendarApp.getCalendarById(calendarId);
// En lugar de seleccionar el rango completo, solo necesito las filas que tengan el valor "select" en su celda D.
var eventArray = spreadSheet.getRange("A1:D100").getValues();
}

for (x=0; x<eventmatrix.length; x++){
var calevent = eventarray[x];
var eventname = calevent[0];
var starttime = calevent[1];
var endtime = calevent[2];

eventcal.createevent(eventname, starttime, endtime);
}
“` x++){=”” var=”” calevent=”eventArray[x];” var=”” eventname=”calEvent[0];” var=”” starttime=”calEvent[1];” var=”” endtime=”calEvent[2];” eventcal.createevent(eventname,=”” starttime,=”” endtime);=”” }=””></eventmatrix.length; x++){
var calevent = eventarray[x];
var eventname = calevent[0];
var starttime = calevent[1];
var endtime = calevent[2];

eventcal.createevent(eventname, starttime, endtime);
}
“`>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para seleccionar solo el rango que tenga un valor “select” en su columna D, puedes modificar la línea donde se define eventArray. En lugar de proporcionar el rango “A1:D100”, puedes usar el método createTextFinder para encontrar todas las celdas con el valor “select” en la columna D, y luego usar getA1Notation para obtener la cadena de rango de todas las celdas coincidentes. Aquí está el código modificado:

    function calendarSync() {
        var spreadSheet = SpreadsheetApp.getActiveSheet;
        var eventCal = CalendarApp.getCalendarById(calendarId);
        var selectFinder = spreadSheet.createTextFinder("select").matchCase(true).matchEntireCell(true);
        var selectCells = selectFinder.findAll();
        var selectRanges = selectCells.map(function(cell) {
            return cell.getSheet().getRange(cell.getRow(), 1, 1, 4).getA1Notation();
        });
        var eventArray = spreadSheet.getRangeList(selectRanges).getValues();
    
        for (x=0; x<eventarray.length; x++){
          var calevent = eventarray[x];
          var eventname = calevent[0];
          var starttime = calevent[1];
          var endtime = calevent[2];
    
          eventcal.createevent(eventname, starttime, endtime);
        }
    }
    

    este código utiliza createtextfinder para encontrar todas las celdas en la hoja activa que tienen el valor “select” (distingue entre mayúsculas y minúsculas y solo coincide con celdas completas) y devuelve un objeto rangelist. luego, realiza un mapeo sobre cada celda de la lista y obtiene el rango de las columnas a a d para esa fila y convierte cada rango en una cadena de notación a1. finalmente, pasa el array de cadenas de rango a getrangelist para crear un nuevo objeto rangelist y recupera los valores de esos rangos. el resto del código sigue siendo el mismo. x++){=”” var=”” calevent=”eventArray[x];” var=”” eventname=”calEvent[0];” var=”” starttime=”calEvent[1];” var=”” endtime=”calEvent[2];” eventcal.createevent(eventname,=”” starttime,=”” endtime);=”” }=”” }=”” “`=”” este=”” código=”” utiliza=”” createtextfinder=”” para=”” encontrar=”” todas=”” las=”” celdas=”” en=”” la=”” hoja=”” activa=”” que=”” tienen=”” el=”” valor=”” “select”=”” (distingue=”” entre=”” mayúsculas=”” y=”” minúsculas=”” y=”” solo=”” coincide=”” con=”” celdas=”” completas)=”” y=”” devuelve=”” un=”” objeto=”” rangelist.=”” luego,=”” realiza=”” un=”” mapeo=”” sobre=”” cada=”” celda=”” de=”” la=”” lista=”” y=”” obtiene=”” el=”” rango=”” de=”” las=”” columnas=”” a=”” a=”” d=”” para=”” esa=”” fila=”” y=”” convierte=”” cada=”” rango=”” en=”” una=”” cadena=”” de=”” notación=”” a1.=”” finalmente,=”” pasa=”” el=”” array=”” de=”” cadenas=”” de=”” rango=”” a=”” getrangelist=”” para=”” crear=”” un=”” nuevo=”” objeto=”” rangelist=”” y=”” recupera=”” los=”” valores=”” de=”” esos=”” rangos.=”” el=”” resto=”” del=”” código=”” sigue=”” siendo=”” el=””></eventarray.length; x++){
    var calevent = eventarray[x];
    var eventname = calevent[0];
    var starttime = calevent[1];
    var endtime = calevent[2];

      eventcal.createevent(eventname, starttime, endtime);
    }
    

    }
    “`

    este código utiliza createtextfinder para encontrar todas las celdas en la hoja activa que tienen el valor “select” (distingue entre mayúsculas y minúsculas y solo coincide con celdas completas) y devuelve un objeto rangelist. luego, realiza un mapeo sobre cada celda de la lista y obtiene el rango de las columnas a a d para esa fila y convierte cada rango en una cadena de notación a1. finalmente, pasa el array de cadenas de rango a getrangelist para crear un nuevo objeto rangelist y recupera los valores de esos rangos. el resto del código sigue siendo el mismo.>

Comments are closed.