<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ google sheets - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ google sheets - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 25 Jun 2026 09:38:55 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/tag/google-sheets/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Tutorial de Google Sheets: Cómo habilitar la validación de datos en selección múltiple usando Apps Script ]]>
                </title>
                <description>
                    <![CDATA[ En este artículo, te mostraré cómo permitir que se seleccionen varios elementos mediante la función de validación de datos de lista desplegable en Hojas de cálculo de Google. Aquí está la Hoja de cálculo de Google [https://docs.google.com/spreadsheets/d/1yxc4k1x5idcS_moQ1Bq8LnHGZF2nm9dpARglY7Rv0UI/edit#gid=390071620]  que usaremos para el ejemplo. Puedes hacer una copia para editarla tú ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/tutorial-de-google-sheets-como-habilitar-la-validacion-de-datos-en-seleccion-multiple-usando-apps-script/</link>
                <guid isPermaLink="false">63fe2bed2154fe0736d61e63</guid>
                
                    <category>
                        <![CDATA[ google sheets ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ BlackeyeB ]]>
                </dc:creator>
                <pubDate>Sat, 04 Mar 2023 01:44:25 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/02/multiple-selection-data-validation.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/google-sheets-multiple-data-validation-selections/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Google Sheets Tutorial – How to Enable Multiple Selection Data Validation Using Apps Script</a>
      </p><p>En este artículo, te mostraré cómo permitir que se seleccionen varios elementos mediante la función de validación de datos de lista desplegable en Hojas de cálculo de Google.</p><p><a href="https://docs.google.com/spreadsheets/d/1yxc4k1x5idcS_moQ1Bq8LnHGZF2nm9dpARglY7Rv0UI/edit#gid=390071620">Aquí está la Hoja de cálculo de Google</a> que usaremos para el ejemplo. Puedes hacer una copia para editarla tú mismo haciendo clic en <code>Archivo -&gt; Hacer una copia</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/03/Imagen1.png" class="kg-image" alt="image-13" width="575" height="234" loading="lazy"></figure><p>Al final del artículo hay un tutorial en video que grabé para este artículo. ?</p><h2 id="el-problema-"><strong>El problema ?</strong></h2><p>Mi hijo de cinco años planteó una pregunta que desencadenó una inmersión profunda en Google Apps Script. Quería tener varios elementos seleccionados de una lista desplegable de validación de datos.</p><p>¡Deja que un niño de cinco años me envíe a Google, YouTube y más allá en busca de una solución para la hoja de cálculo! ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/michelangelo.gif" class="kg-image" alt="michelangelo" width="600" height="400" loading="lazy"><figcaption>Gif de Michelangelo de Las Mutantes Tortugas Ninja</figcaption></figure><p>Habíamos creado una hoja de cálculo que mostraba información sobre las Tortugas Ninja mutantes. Nombres, cumpleaños, edades, colores favoritos...</p><p>Estaba destacando el increíble poder de las hojas de cálculo para organizar, calcular y visualizar información. Cosas típicas de la educación de niños de cinco años.</p><p>Para la columna de color favorito, usamos una lista desplegable para seleccionar de una lista de colores.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-3.png" class="kg-image" alt="image-3" width="600" height="400" loading="lazy"></figure><p>Esta es una característica bastante simple de usar en Hojas de cálculo de Google. Para crear una lista desplegable, seleccione <code>Datos -&gt; Validación de datos</code> del menú:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/03/Imagen2.png" class="kg-image" alt="image-4" width="292" height="505" loading="lazy"><figcaption>Captura de pantalla del menú de datos de las Hojas de Cálculo de Google</figcaption></figure><p>Actualización: la misma función ahora también está disponible cuando haces clic con el botón derecho en una celda:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/03/Imagen3.png" class="kg-image" alt="image-5" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/03/Imagen3.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/03/Imagen3.png 605w" width="605" height="165" loading="lazy"><figcaption>Captura de pantalla del menú contextual en Hojas de cálculo de Google</figcaption></figure><p>En cualquier caso, aparecerá un menú de validación de datos donde podrás establecer tus condiciones.</p><p>Teníamos nuestra lista de colores en las celdas, <code>H2:H9</code> así que seleccionamos <code>Menú Desplegable (desde un intervalo)</code>en la sección Criterios y luego ingresamos ese rango.</p><p>Queríamos que se copiara a otras celdas sin afectar a ese rango, así que lo bloqueamos, usando los signos $: <code>=$H$2:$H$9</code>.</p><p>Esto permite que la validación se copie a otras celdas mientras se conservan esas referencias de celda para la lista de valores de color.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/03/Imagen13-1.jpg" class="kg-image" alt="image-7" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/03/Imagen13-1.jpg 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2023/03/Imagen13-1.jpg 1000w, https://www.freecodecamp.org/espanol/news/content/images/2023/03/Imagen13-1.jpg 1243w" sizes="(min-width: 720px) 720px" width="1243" height="3307" loading="lazy"><figcaption>Captura de pantalla del menú de opciones de validación de datos de Hoja de Cálculo de Google</figcaption></figure><h2 id="hojas-de-c-lculo-de-google-permite-una-sola-selecci-n-"><strong>Hojas de cálculo de Google permite una sola selección ?</strong></h2><p>El problema es que las Hojas de Cálculo de Google solo permiten una única selección. ¡Queríamos que Leonardo tuviera varios colores favoritos!</p><p>Por suerte, Google Apps Script permite escribir código personalizado dentro de las Hojas de cálculo de Google y así pudimos resolver nuestro problema.</p><p>Encontré el código para hacerlo en un <a href="https://www.youtube.com/watch?v=dm4z9l26O0I">vídeo</a> de YouTube de Alexander Ivanov y me dispuse a actualizar la información con un vídeo más claro y una explicación propia.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/problem-solved.gif" class="kg-image" alt="problem-solved" width="600" height="400" loading="lazy"><figcaption>Gif problema resuelto</figcaption></figure><h2 id="c-mo-usar-apps-script-"><strong>Cómo usar Apps Script?‍?</strong></h2><p>Abre la pantalla de Apps Script seleccionando <code>Extensiones -&gt; Apps Script</code> desde la barra de menús.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/03/Imagen5-1.png" class="kg-image" alt="image-9" width="405" height="232" loading="lazy"></figure><p>Podrás crear archivos usando el ícono más <code>+</code>. Para este proyecto necesitamos un archivo<code>Code.gs</code> y un archivo<code>Page.html</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/03/Imagen6.png" class="kg-image" alt="image-8" width="431" height="441" loading="lazy"></figure><h2 id="el-archivo-code-gs"><strong>El archivo Code.gs</strong></h2><p>Comienza en el archivo Code.gs.</p><p>Lo primero que queremos es un menú desplegable en la barra de herramientas de la Hoja de cálculo de Google para ejecutar nuestro código.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-14.png" class="kg-image" alt="image-14" width="600" height="400" loading="lazy"><figcaption>Captura de pantalla de la barra desplegable personalizada de Google Sheets</figcaption></figure><p>Usamos el siguiente código para agregar la opción de interfaz de usuario <code>Show dialog</code> en la barra de menú. Al hacer clic, ejecutará la función <code>showDialog</code>. Al envolver la llamada a estos métodos en la función incorporada<strong> </strong><code>onOpen</code>, este menú se añade en la barra de herramientas en cuanto abrimos la hoja de cálculo.</p><pre><code class="language-javascript">function onOpen(e) {								
	SpreadsheetApp.getUi()								
	.createMenu('Multiple Select Data Validation')
	.addItem('Show dialog', 'showDialog')								
	.addToUi();								
}	</code></pre><p>A veces tarda un poco antes de que los menús personalizados estén visibles en el menú. Dale unos segundos y aparecerá.</p><p>La función<code>showDialog</code> creará una variable HTML a partir de una plantilla que crearemos en un momento. Luego usa el método incorporado <code>.showSidebar</code>para crear una barra lateral con ese html.</p><pre><code class="language-javascript">function showDialog() {								
	var html = HtmlService.createTemplateFromFile('Page').evaluate();
	SpreadsheetApp.getUi().showSidebar(html);								
}</code></pre><p>Luego tenemos otra función, <code>valid</code>, que verificará la celda actual en busca de cualquier criterio de validación de datos y devolverá esos valores en un arreglo bidimensional.</p><pre><code class="language-javascript">var valid = function(){								
	try{								
		return SpreadsheetApp.getActiveRange().getDataValidation().getCriteriaValues()[0].getValues();								
    }catch(e){								
        return null								
    }								
}	</code></pre><p>Y nuestra función final, <code>fillCell</code> creará un arreglo para contener la lista resultante de valores que queremos que contenga la celda. Luego guarda estos valores en el arreglo y los separa por comas.</p><p>Por último, utiliza el método incorporado <code>setValue</code>para llenar la celda actual con los valores separados por comas (nuestros colores favoritos).</p><p>(<code>fillCell</code> y <code>valid</code> se llaman en el código Page.html que estamos a punto de ver).</p><pre><code class="language-javascript">function fillCell(e){								
	var s = [];								
	for(var i in e){								
		if(i.substr(0, 2) == 'ch') s.push(e[i]);								
}								
    if(s.length) SpreadsheetApp.getActiveRange().setValue(s.join(', '));
}</code></pre><p>Aquí está el código completo para el archivo <code>Code.gs</code>:</p><pre><code class="language-javascript">function onOpen(e) {								
	SpreadsheetApp.getUi()								
	.createMenu('Multiple Select Data Validation')
	.addItem('Show dialog', 'showDialog')								
	.addToUi();								
}								
function showDialog() {								
	var html = HtmlService.createTemplateFromFile('Page').evaluate();
	SpreadsheetApp.getUi().showSidebar(html);								
}								
var valid = function(){								
	try{								
		return SpreadsheetApp.getActiveRange().getDataValidation().getCriteriaValues()[0].getValues();								
    }catch(e){								
        return null								
    }								
}								
function fillCell(e){								
	var s = [];								
	for(var i in e){								
		if(i.substr(0, 2) == 'ch') s.push(e[i]);								
}								
    if(s.length) SpreadsheetApp.getActiveRange().setValue(s.join(', '));
}</code></pre><h2 id="el-archivo-page-html"><strong>El archivo Page.html</strong></h2><p>Ahora crea y abre un archivo llamado <code>Page.html</code>.</p><p>Esto controlará un recuadro emergente donde manejaremos nuestras selecciones múltiples y contendrá:</p><ol><li>un formulario con casillas de verificación junto a cada opción</li><li>un botón para rellenar la celda actual</li><li>un botón para obtener la validación de la celda actual</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-10.png" class="kg-image" alt="image-10" width="600" height="400" loading="lazy"><figcaption>Captura de pantalla de nuestra barra lateral html personalizada de la Hoja de Cálculo de Google</figcaption></figure><p>Usaremos una plantilla HTML para nuestro ejemplo. Primero, crea una variable, <code>data</code> llamando a la función <code>valid()</code> que creamos arriba. Usamos la sintaxis <code>&lt;? CODIGO_VA_AQUI ?&gt;</code> para escribir el código dentro de la plantilla html.</p><pre><code class="language-javascript">&lt;? var data = valid(); ?&gt;</code></pre><p>Luego creamos un formulario para albergar todos los datos extraídos de la función <code>valid()</code>:</p><pre><code class="language-html">&lt;form id="form" name="form"&gt;
&lt;/form&gt;
    </code></pre><p>Y ejecutaremos un código para crear nuestra lista de casillas de verificación dentro de este formulario. Primero, verificamos si los datos en la celda son de tipo <code>[object Array]</code>.</p><pre><code class="language-javascript">&lt;? if(Object.prototype.toString.call(data) === '[object Array]') { ?&gt;</code></pre><p><code>valid()</code>devuelve un arreglo bidimensional porque está usando el método incorporado <code>getValues()</code>. Esto devuelve un arreglo de arreglos, cada una de las cuales es uno de los colores favoritos:</p><pre><code class="language-javascript">//A modo de ilustración; este es el tipo de arreglo 2D que devolverá valid()

favoriteColors = [
    ["purple"],
    ["red"],
    ["white"],
    ["black"]
]</code></pre><p>Esto ayudará para cuando veamos el siguiente fragmento de código que puede parecer abrumador.</p><p>Necesitamos acceder a cada color: las cadenas de caracteres. Hacemos esto anidando bucles con<code>for</code>. El primer ciclo itera a través de cada posición en el arreglo de colores favoritos.</p><pre><code class="language-javascript">&lt;? for (var i = 0; i &lt; data.length; i++) { ?&gt;</code></pre><p>El segundo ciclo itera a través de cada elemento en las matrices interiores. En nuestro caso, este siempre será un elemento, ya que cada una de estas matrices tiene una longitud de 1.</p><pre><code class="language-javascript">&lt;? for (var j = 0; j &lt; data[i].length; j++) { ?&gt;</code></pre><p>Recuerde, <code>["purple"]</code>es un arreglo de longitud 1. El bucle <code>j</code> no cuenta las letras de la cadena <em><em>dentro</em></em> del arreglo, solo estamos contando la longitud <em><em>de</em>l</em> arreglo.</p><p>Entonces, estamos recorriendo cada elemento en el arreglo 2D y creando una casilla de verificación para cada uno:</p><pre><code class="language-javascript">&lt;input type="checkbox" id="ch&lt;?= '' + i + j ?&gt;" name="ch&lt;?= '' + i + j ?&gt;" value="&lt;?= data[i][j] ?&gt;"&gt;&lt;?= data[i][j] ?&gt;&lt;br&gt;</code></pre><p>Esto agrega un <code>id</code> y <code>name</code> que comienza con "ch" y luego agrega la posición del arreglo del elemento. También extrae el valor <code>value</code>(el color) además del texto mostrado.</p><p>Estas capturas de pantalla pueden ayudar a visualizarlo:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-11.png" class="kg-image" alt="image-11" width="600" height="400" loading="lazy"><figcaption>captura de pantalla del elemento inspeccionado: la entrada(input) con una identificación(id)</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/01/image-12.png" class="kg-image" alt="image-12" width="600" height="400" loading="lazy"><figcaption>captura de pantalla del elemento inspeccionado: el formulario(form) y los elementos de entrada(input)</figcaption></figure><p>Si nuestra condición inicial <code>if</code> falla, mostraremos un mensaje <code>&lt;p&gt;</code> que indica que tal vez no haya reglas de validación de datos en esa celda mientras se vincula a un artículo de soporte que muestra cómo crear una lista desplegable en la celda.</p><pre><code class="language-javascript">else { ?&gt;								
	&lt;p&gt;Maybe current cell doesn't have &lt;a href="https://support.google.com/drive/answer/139705?hl=en"&gt;Data validation...&lt;/a&gt;&lt;/p&gt;								
&lt;? } ?&gt;</code></pre><h3 id="c-mo-programar-los-botones"><strong>Cómo programar los botones</strong></h3><p>Luego necesitamos nuestros dos botones.</p><p>El primer botón extrae la validación de datos de la celda. Ejecuta la función <code>showDialog()</code> que creamos en <code>Code.gs</code> y crea el formulario de casillas de verificación si existen valores de validación de datos.</p><pre><code class="language-javascript">// obtiene la validación de la celda actual
&lt;input type="button" value="get validation from current" onclick="google.script.run.showDialog()" /&gt;</code></pre><p>El segundo botón rellena los valores seleccionados en la celda actual. <strong><strong>¡</strong>L<strong>o que buscábamos todo el tiempo! </strong></strong>Esto ejecuta la función <code>fillCell</code> de <code>Code.gs</code>.</p><pre><code class="language-javascript">// Rellena los valores de la celda actual 
&lt;input type="button" value="fill current" onclick="google.script.run.fillCell(this.parentNode)" /&gt;</code></pre><p>Aquí está el código completo de <code>Page.html</code>:</p><pre><code class="language-javascript">&lt;div&gt;								
&lt;? var data = valid(); ?&gt;								
&lt;form id="form" name="form"&gt;								
&lt;? if(Object.prototype.toString.call(data) === '[object Array]') { ?&gt;								
&lt;? for (var i = 0; i &lt; data.length; i++) { ?&gt;								
    &lt;? for (var j = 0; j &lt; data[i].length; j++) { ?&gt;								
        &lt;input type="checkbox" id="ch&lt;?= '' + i + j ?&gt;" name="ch&lt;?= '' + i + j ?&gt;" value="&lt;?= data[i][j] ?&gt;"&gt;&lt;?= data[i][j] ?&gt;&lt;br&gt;								
    &lt;? } ?&gt;								
&lt;? } ?&gt;								
&lt;? } else { ?&gt;								
        &lt;p&gt;Maybe current cell doesn't have &lt;a href="https://support.google.com/drive/answer/139705?hl=en"&gt;Data validation...&lt;/a&gt;&lt;/p&gt;								
&lt;? } ?&gt;								
    &lt;input type="button" value="fill current" onclick="google.script.run.fillCell(this.parentNode)" /&gt;								
    &lt;input type="button" value="get validation from current" onclick="google.script.run.showDialog()" /&gt;								
&lt;/form&gt;								
&lt;/div&gt;	</code></pre><h2 id="resumen">Resumen</h2><p>Sí, es una solución bastante engorrosa para algo relativamente simple. Tal vez Google agregue esta funcionalidad en algún momento. Recientemente, actualizaron la Validación de datos para incluir una funcionalidad más moderna y fácil de usar, por eso no lo descarto.</p><p>Hasta ahora, esta ha sido una gran solución para mí y estoy agradecido a <a href="https://www.youtube.com/watch?v=dm4z9l26O0I">Alexander</a> por su código inicial.</p><p>¡Espero que este artículo te haya ayudado a comprender un poco mejor el código y que te capacite para crear tus propias soluciones personalizadas con Hojas de cálculo de Google!</p><p>Como prometí, aquí está mi video tutorial:</p><h2 id="videotutorial-en-ingl-s-"><strong>Videotutorial ?️ (en inglés)</strong></h2><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.178026315789474%;" class="fluid-width-video-wrapper">
            <iframe src="https://www.youtube.com/embed/41ydIPKZezE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Embedded content" loading="lazy" name="fitvid0" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 22px; vertical-align: middle; position: absolute; top: 0px; left: 0px; width: 760px; height: 426.953px;"></iframe>
          </div>
        </div>
      </figure><h2 id="-gracias-"><strong>¡Gracias!</strong></h2><p>¡Gracias por leer! Si esto te resultó útil, me encantaría que me siguieras y dijeras hola ? en <a href="https://www.linkedin.com/in/eamonncottrell/">LinkedIn</a> y <a href="https://www.youtube.com/@eamonncottrell">YouTube</a>, donde puedes encontrar más contenido como este.</p><p>¡Mis mejores deseos!</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
