Tengo este fragmento de código:
function getTimeFrames(){ var ss = SpreadsheetApp.getActive(); var cell = ss.getRange("C1").getValue(); Logger.log(cell); var s = ss.getSheetByName(cell).getRange("M2:M"); var unique = new Set(s.getValues()); unique.forEach(x => Logger.log(x)) }Este código se llamaría desde una hoja de cálculo de Hojas de cálculo de Google que sirve como interfaz de usuario, donde la celda C1 sería el nombre de una hoja utilizada para almacenar datos. En esa hoja, tengo una columna (M) de la que necesito obtener los valores únicos para almacenarlos en un menú desplegable en la hoja de la interfaz de usuario.
El problema que tengo es que no puedo hacer funcionar la parte de valores únicos. A lo largo de mi experimentación, obtendría una lista de todos los valores de la columna M o ningún resultado de registro.
¡Cualquier ayuda es muy apreciada!
Probar
function getTimeFrames(){ var ss = SpreadsheetApp.getActive(); var cell = ss.getRange("C1").getValue(); Logger.log(cell); var unique = ss.getSheetByName(cell).getRange("M2:M").getValues().flat().filter(onlyUnique) console.log(unique) } function onlyUnique(value, index, self) { return self.indexOf(value) === index; }Esto era realmente un trabajo duro antes de ES6 . Pero ahora, con una combinación de filter() e indexOf() , puede lograrlo fácilmente.
Por ejemplo:
var List = ['One','Two','Two','One','One','Two','One','Three'] const uniqueList = (value,index,self) => {return self.indexOf(value) ===index;} var finalUniqueList =List.filter(unique);Intente distribuir los valores únicos en una matriz:
function getTimeFrames() { const sheet = SpreadsheetApp.getActive() const cell = sheet.getRange(`C1`).getValue() const values = sheet.getSheetByName(cell) .getRange(`M2:M`) .getValues() .filter(String) .flat() const unique = [...new Set(values)] Logger.log(unique) }