Usando fórmulas matriciales o con matrices (arreglos) en Excel. ¿Cuál es su utilidad?

Por lo general, cuando tenemos o hacemos una fórmula en Excel, la hacemos para una celda y luego la copiamos y pegamos en el resto de las celdas Por ejemplo, si tenemos en una columna datos como los precio de un producto y en otra columna la cantidad de artículos de esos producto nos posicionamos en una nueva celda y hacemos la fórmula correspondiente, y luego copiamos esa formula en el resto de la columna; algo así:

=B1*C1
=B2*C2

.. etc.

De esta forma corremos el peligro o de pegar mal la fórmula o de modificarla sin querer con las consecuencias correspondientes.

Con las fórmulas matriciales no sucede eso, ya que si se quiere modificar la fórmula de una celda, Excel nos marcará error y no lo permitirá.

¿Como se crea una fórmula matricial? Siguiendo con el ejemplo anterior:

Selección_427

La columna Total contiene el resultado de multiplicar la Cantidad por el Precio de cada una de las filas. Así es como normalmente lo hacemos. Ahora lo haremos aplicando la Fórmula Matricial. Seleccionamos el rango de Totales, celdas D2 hasta D5 (D2:D5), y escribimos la fórmula de la siguiente manera:

=B2:B5*C2:c5

Y aquí viene lo diferente en lugar de dar solamente  la tecla <Entrar> para guardar la fórmula, usamos la siguiente combinación <Mayús><Ctrl><Entrar>; esta combinación convertirá la formula sencilla a una fórmula matricial:

Selección_428Observe las Llaves ({}) que encierran a la fórmula, estos corchetes indican que ésta es una fórmula matricial. El rango D2:D5 tendrá la misma fórmula. Ahora intentemos cambiar el valor de la celda D2:

Selección_429

Al intentar cambiar el valor a 5 y dar <Entrar>, nos muestra el error de la figura anterior, que nos indica que no podemos cambiar el valor de esa celda ya que pertenece a una matriz. La única forma es seleccionar todo el rango de la matriz y borrar.

Entre otras más aplicaciones de las formulas matriciales esta la siguiente:

Selección_430

En este caso nos sirve para llevar a cabo la sumatoria de los totales de cada producto en un solo paso. Tradicionalmente sacaríamos o calcularíamos primero el total de cada producto y luego una sumatoria de dichos totales para obtener el total total (así se obtuvo la cantidad de la celda D6). Sin embargo utilizando las fórmulas matriciales con una función, en este caso SUMA, podemos obtener el total total en sólo un paso como se obtuvo en la celda C6, como lo muestra la imagen anterior. Para ello se escribió en la celda C6 la función SUMA de esta forma:

SUMA(B2:B5*C2:C5)

Y lo importante, dar la combinación de teclas anteriormente descritas para guardar y convertir esta operación en una fórmula matricial: <Mayús><Ctrl><Entrar>.

Espero y les sirva este tip.  ¡No olvides visitar a los anunciantes!

¡Gracias!

 

¿Lo haz hecho? Dar nombres a rangos de celdas en Excel y utilizarlos en fórmulas.

A partir de la versión 2007 de Excel es posible ponerle nombre o alias a un rango de celdas seleccionadas. ¿Y para que sirve? Bueno, estos nombres o alias los podemos usar con las fórmulas. Es mas fácil escribir en las formulas nombres descriptivos que rangos de celdas, por ejemplo, ¿que es más fácil recordar y escribir si queremos sumar un rango de cantidades que representa totales de algo?

Esto: SUMA(B1:B17)
ó esto: SUMA(totales)

Es más fácil la segunda forma, ¿no creen?

Hay varias formas de ponerle nombre a rangos de celdas. La más fácil creo yo es seleccionar el rango de celdas, dar botón derecho sobre la selección y seleccionar la opción “Definir nombre…” en el menú contextual que aparece.Selección_423

Aparece el diálogo “Nombre nuevo” donde le especificamos el nombre que le queremos asignar o dar al rango de celdas, sin espacios. Por ejemplo, “totales_del_mes”.

Selección_424

Una vez hecho esto, podemos poner el nombre del rango en una fórmula o función, por ejemplo en la función SUMA, así:

Selección_425

Ahora, ¿como sé a que rangos les he dado nombres, cómo les he llamado y que rango de celdas contienen? Fácil, usamos el “Administrador de nombres” del Excel. ¿Cómo accedo a él? Usando FÓRMULAS->Administrador de nombres.

Selección_426

Como pueden observar, en este diálogo podemos añadir nuevos nombres de rangos, modificar los existentes y/o eliminarlos.

Así que si no habían usado esta característica de Excel, ahora ya la conocen.

¡Saludos y no olviden visitar los anuncios de los patrocinadores del blog!

¿Has usado el elemento Tabla en Excel? Tablas dentro de la hoja de cálculo.

¿Que ventajas tiene usar una Tabla en Excel contra los métodos tradicionales? Varias ventajas; entre muchas otras:

  • No es necesario especificar manualmente filtros, automáticamente se les asigna un filtro a cada una de las columnas .
  • Se tiene mejor control de los datos.
  • No es necesario especificar fórmulas para cada celda, con especificar la fórmula en una columna, automáticamente se aplica la fórmula en toda la columna.
  • Automáticamente se puede añadir una fila de totales donde se puede seleccionar el tipo de resumen: sumatorias, promedios, máximo, mínimo, etc.
  • Existen estilos de tablas predefinidos que se pueden aplicar (combinación y diseño de tabla) así como definir un estilo propio.
  • Las gráficas que dependen de estos datos se actualizan automáticamente aunque se agregue nueva información a esta tabla.

¿Que tipos de datos puede contener una Tabla? Datos homogéneos, por ejemplo los datos de Clientes, Productos, Proveedores, etc.. Se utilizaría una tabla por cada grupo homogéneo de datos, es decir, una Tabla para almacenar los datos de Cliente, otra para la de Productos y así.

¿Cómo crear una tabla? En el siguiente ejemplo, tenemos los datos del censo 2010 de INEGI, por Estado y distribución por edades. Para convertir a Tabla esos datos seleccionamos el rango de celdas que queremos que aparezcan en la Tabla y enseguida seleccionamos INSERTAR->Tabla, y en el diálogo “Crear tabla” marcamos la casilla “La tabla tiene encabezados.”, ya que los datos seleccionados tiene encabezados (Clave, Estado, etc.). La siguiente imagen muestra los pasos anteriormente indicados:

Selección_417

Una vez hecho los pasos anteriores, nuestro rango seleccionado de datos quedará convertida en una Tabla son el estilo por defecto como se muestra en la imagen:

Selección_418

Cada columna del encabezado se convirtió en un filtro por el que podemos filtrar las filas para que sólo se muestren los datos requeridos de la tabla u ordenar dichos datos. En la imagen siguiente se muestra la tabla ordenada en forma descendente por la columna “De 0 a 4 años”.

Selección_419Como se comentó anteriormente, si se agrega una fórmula en una de las columnas, la fórmula se replicará en cada una de las filas automáticamente. En el siguiente ejemplo la primera fila con datos de columna “Total” se relleno con la sumatoria de las tres siguientes columnas “De 0 a 4 años”, “De 5 a 9 años” y “De 10 a 14 años”; la tabla automáticamente replica la fórmula en cada una de las filas como lo muestra la figura.

Selección_420

También se puede activar una fila de totales, para hacerlo, posicionado dentro de la Tabla, seleccione DISEÑO->Opciones de estilo de tabla y marcamos la casilla “Fila de totales”.

Selección_421

Si nos colocamos en alguna de las columnas de la fila de totales, excel nos presenta una serie de opciones a escoger, como son las funciones de sumatoria, promedio, contar, máximo, mínimo, etc.:

Selección_422

Hasta aquí, algunas de las ventajas de utilizar una Tabla en Excel. Espero y les sea útil.

¡Visiten los anuncios en el blog para seguir conservándolo y poder publicar otros tips como estos! ¡O sugiere un tip en los comentarios!

¡Gracias!

Remover apóstrofos de los datos en Excel.

A veces cuando importamos datos a una hoja de excel nos encontramos con que datos numéricos o fechas no son reconocidos como tales por el excel.

Si observamos en la casilla de contenido de la celda vemos que a la fecha o al número le antecede un apóstrofo como se muestra en la imagen siguiente:

Selección_415

Esto le indica a excel que trate el contenido de la celda como si fuera texto. En este caso no reconoce como fecha el dato y por lo tanto ordenar por fecha y otras operaciones por fecha no funcionarán. Lo mismo sucederá si el contenido después del apostrofe es un número; no será reconocido como tal. Buscar y reemplazar no funcionará así que se hace lo siguiente:

Selecciona las celdas a las cuales se le quiere elimina el apóstrofo y seleccionamos DATOS -> Texto en columnas -> Finalizar como se muestra en la imagen siguiente:

Selección_416

Al terminar, en este caso, las fechas se alinearán a la derecha y serán reconocidas como tales por excel. El mismo procedimiento funciona con datos numéricos.

Espero y les sea útil este consejo. No te olvides de visitar a los patrocinadores del sitio dando clik en los anuncios.

¡Gracias!

Primefaces: datatable editable no regresa el nuevo valor de la celda ni la rowkey en el evento CellEditEvent.

Antes que nada ¡Feliz año nuevo a todos! Que cumplan todas sus metas este año y en los venideros…

Ahora si, entremos en materia. Actualmente trabajo con la versión 5.3 de Primefaces y todo iba correctamente hasta que me topé con esta cuestión. El evento CellEditEvent no me regresaba valores en los métodos getNewValue y getRowKey. El primero se supone que me debería regresar el nuevo valor capturado en la celda y el segundo el valor único que identificaba a la fila (row) del DataTable sin embargo no era así. Así que me puse a buscar y las soluciones que daban, no funcionaban. Hasta que me puse a examinar minuciosamente los ejemplos del sitio de Primefaces (showcase) y compararlo con mi código y ahí resolví una de las incógnitas:

Mientras que el código de mi CDI bean obtenía los datos que llenaban la datatable de un método que hacía una consulta a la base de datos, en el ejemplo, la cargaban de una propiedad en el bean que era inicalizada previamente al construir el bean a través de un método etiquetado @PostConstruct; cabe aclarar que ambos bean tenian el alcance @ViewScoped. Así que procedí a agregar una propiedad en mi bean y el método que la inicializara con los datos de la base de datos  y agregar su respectivo getter y setter. ¡Vualá! El evento CellEditEvent me regresó el nuevo valor de la celda, sin embargo el valor RowKey de la fila donde se encontraba la celda editada seguía sin tener valor.  En los ejemplos no mostraban como obtener este dato, sólo mostraban como obtener el nuevo y antiguo valor.

Para resolver la segunda incógnita, volví a busca ahora algo de como obtener el RowKey en el evento pero no encontré mucha información, sin embargo en las páginas relacionaban mucho el RowKey con los métodos de selección  del DataTable así que le agregué la propiedad selectionMode=”single” a la datatable y ¡eureka! ¡el evento CellEditEvent me regresó el valor requerido!

En resumen, para solucionar el problema fue necesario agregar una propiedad local en el CDI bean que almacenara la lista de datos que llenarían el DataTable y en la definición de la datatable, en el archivo .xhtml, añadir y asignar “single” a la propiedad selectionMode.

Espero les sirva. ¡No se olviden de visitar a los patrocinadores!

java.lang.IllegalStateException: getOutputStream() has already been called for this response. Glassfish 4.1.1.

Desde hace un tiempo, utilizo Glassfish como servidor de aplicaciones en mis desarrollos web con Java. Sin embargo en el proyecto que actualmente trabajo, al descargar la última versión y querer añadir un nuevo pool de conexiones, la consola de administración gráfica de Glassfish 4.1.1 me arroja el siguiente error:

java.lang.IllegalStateException: getOutputStream() has already been called for this response.

Buscando la causa me encuentro que es un bug en esta nueva versión de Glassfish que aún no ha sido resuelto. Hay que recordar que Oracle dejó de dar soporte sobre este producto y por lo tanto, las correcciones de errores son más lentas que antes. En el misma dirección donde se reporta este bug se indica algunas soluciones.

Dentro de las soluciones, me enteré que existe una empresa que ha empezado otro desarrollo en base al código de Glassfish y realiza funciones de mantenimiento más prontas: Payara Server. Lo he descargado y funciona perfectamente hasta el momento. De ahora en adelante utilizaré este servidor de aplicaciones en futuros desarrollos.

¡Felices fiestas!

(Por favor visita a los patrocinadores).

 

Ubuntu 14.04: mount: unknown filesystem type ‘exfat’

Este error lo marca Ubuntu al querer montar un disco externo que fué formateado con el tipo de sistema de archivos exFAT. Por defecto Ubuntu no instala los paquetes necesarios para montar este tipo, así que es necesario instalar los paquetes necesarios. Para eso ejecutamos en una ventana de terminal las órdenes siguientes:

$ sudo apt-get install exfat-fuse exfat-utils

Una vez instalados, será posible montar este disco externo o memoria USB. No olvides visitar a los patrocinadores, dando un click en los anuncios. Me ayudas a seguir conservando este sitio.

¡Gracias!

psql version 8.4, server version 9.3. Some psql features might not work. CentOS 6.x

Si recibes este mensaje mientras tratas de ejecutar el programa cliente psql para conectarte a postgresql 9.3, es debido a un conflicto de versiones. CentOS 6 lleva por defecto con las utilitarias de conexión de la versión 8.4 y al instalar una versión más actual como la 9.3 puede surgir este conflicto.

Para solucionar este problema sigue los siguientes pasos (a mi me funcionó):

Listamos los paquetes que tenemos instalados de postgresql:

Como se puede observar en mi caso, tenemos paquetes de la versión antigua 8.4.x. Procedemos a desinstalar dichos paquetes (yo estoy seguro que no estoy usando la versión 8) con un usuario con derechos administrativos (yo uso el usuario root):

Una vez esto hecho, si intentamos ejecutar el  programa cliente psql no funcionará, porque el psql por defecto fue desinstalado y el sistema no lo hallará en la ruta de ejecutables:

Por lo tanto procedemos con el siguiente comando:

Una vez realizada la ejecución del comando, entramos con cualquier otro usuario y ejecutamos el programa psql para comprobar que el mensaje ha desaparecido:

¡No olvides visitar a los patrocinadores dando un clic en los anuncios! ¡Me ayudaras a conservar este sitio! ¡Gracias!

 

Aplicación con Hibernate 5 no puede ser instalada en Glassfish 4.1.1.

No es posible hacer el deploy de una aplicación que contiene las librerías de Hibernate 5.0.3 a Glassfish 4.1.1. En ell archivo log manda el siguiente error grave:

El problema es la incompatibilidad de versiones de la librería jboss-logging.jar que usan dichas versiones de Hibernate y Glassfish. Reemplazando la librería jboss-logging.jar que se encuentra en glassfish/modules  con la librería versión 3.3.0 (jboss-logging-3.3.0.Final.jar) se soluciona el problema.

¡No olvides dar click en los anuncios!

¡Saludos!

 

Mensaje “Cannot run /usr/bin/firefox” en Netbeans 8.

Hola a todos nuevamente.

Me topé con este error al querer ejecutar una aplicación web con el IDE Netbeans 8 en Ubuntu 14.04.  Netbeans no podía abrir firefox para mostrar la aplicación, Chrome funcionaba perfectamente bien.

“Googleando” el problema no daba con la solución, hasta que encontré en el log de netbeans un error lanzado por el Java:

Si ejecutaba directamente el programa, éste respondía bien. Lo qué observé es que ese archivo no era en realidad un archivo, sino que un link que apuntaba al archivo /usr/lib/firefox/firefox.sh. Encontré el archivo ejecutable de firefox en esa misma carpeta, por lo que opté reemplazar la ruta de ese ejecutable en la ventana de administración de navegadores de netbeans como se muestra en la siguiente imagen:

Selección_409

Una vez cambiado el path del firefox y sus argumentos, la aplicación se abrió en farefox sin problemas.

(No olviden visitar los anuncios de los patrocinadores para seguir conservando este sitio).

¡Saludos!