Tengo un script que me permite obtener el contenido de una columna de mi Hoja de Google y mostrarlo en mi formulario HTML mientras elimino cualquier duplicado del mismo nombre.
Ejemplo: rojo, rojo, amarillo, amarillo, azul, verde se mostraría en el menú desplegable como rojo, amarillo, azul, verde.
La cuestión es que me gustaría obtener el contenido de la columna por nombre y no por número, es decir, 1.
Aquí está mi guión:
function getColors() { var sheet = SpreadsheetApp.openById("1czFXXQAIbW9IlAPwHQ0D5S_a-Ew82p-obBEalJFNJTI").getSheetByName("Vinyl Costs"); var getLastRow = sheet.getLastRow(); var return_array = []; for(var i = 2; i <= getLastRow; i++) { if(return_array.indexOf(sheet.getRange(i, 1).getValue()) === -1) { return_array.push(sheet.getRange(i, 1).getValue()); } } return return_array; }Encontré una pregunta similar y la respuesta aceptada fue esta:
function getByName(colName, row) { var sheet = SpreadsheetApp.getActiveSheet(); var data = sheet.getDataRange().getValues(); var col = data[0].indexOf(colName); if (col != -1) { return data[row-1][col]; } }¿Pero parece que no puedo hacer que funcione con el mío? Este es mi primer script de Google, así que todavía no lo entiendo al 100%.
Cambié un poco las funciones.
Por un lado, getByName ahora no obtiene todos los valores de la hoja, sino solo la primera fila.
function getColors() { const sheet = SpreadsheetApp.openById("1czFXXQAIbW9IlAPwHQ0D5S_a-Ew82p-obBEalJFNJTI").getSheetByName("Vinyl Costs"); const colName = 'your_column_name'; const colNum = getColNumberByName(colName); if (colNum === null) { Logger.log('Column ' + colName + ' was not found!'); return []; } const firstRow = 2; const lastRow = sheet.getLastRow(); // get all values from column const columnData = sheet.getRange(firstRow, colNum, lastRow).getValues().flat(); // filter values on duplicates return columnData.filter((el, i) => i === columnData.indexOf(el) && el !== ''); } function getColNumByName(colName, row = 1) { const sheet = SpreadsheetApp.openById("1czFXXQAIbW9IlAPwHQ0D5S_a-Ew82p-obBEalJFNJTI").getSheetByName("Vinyl Costs"); const [data] = sheet.getRange(row, 1, row, sheet.getLastColumn()).getValues(); const col = data.indexOf(colName); // adding 1 because column nums starting from 1 return col === -1 ? null : col + 1; }