Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Ejercicios / Java / Formateo de registros en Excel con JExcel

Formateo de registros en Excel con JExcel

Autor jc mouse jueves, febrero 6, 2014

Tenia un problema, me pasaron unos archivos excel con unos cientos de registros (ver imagen más abajo) que exportaron de una base de datos, los registros estaban en mayúsculas y el formato que tenían no era el que se necesitaba, resumiendo teníamos un registros de la siguiente  forma:

CODIGO      NOMBRE COMPLETO         PROFESION
HBBHKK-03   SR(A) ESTER MOSOBICHO   DOCTOR

y lo que se quería era colocar primero la profesión abreviada de la persona seguido de su nombre, todo esto claro en minúsculas, por ejemplo el resultado del ejemplo anterior seria este:

Dr. Ester Mosobicho

JExcel example

Solución

El lenguaje de programación que elegí fue Java 🙂 y como necesitaba algo que me dejara manipular los archivos excel fácilmente, utilice la librería JExcel (http://jexcelapi.sourceforge.net/), el resultado una clase que me permite aplicar las correcciones al problema y me escribe en pantalla los registros con el formato deseado, la clase a continuación totalmente comentada:

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
/**
 * @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class Xexcel {

    /* variable local para almacenar profesiones y sus abreviaciones */
    private HashMap<String,String> profesiones = new HashMap();

    /**
 * Constructor de clase
 */
    public Xexcel(){        
        //se llenan las profesiones y su abreviatura
        profesiones.put( "Doctor", "Dr." );
        profesiones.put( "Ingeniero", "Ing." );
        profesiones.put( "Maestro", "Mtro." );
        profesiones.put( "Arquitecto", "Arq." );
        profesiones.put( "Bioquimico", "Bq." );        
        profesiones.put( "Administrador", "Adm." );
    }

    /**
 * Metodo que aplica el formato al texto extraido de un archivo excel
 * @param String xls direccion del archivo excel 2003
 */
    public void formatear( String xls )
    {
        String tmp = "DR(A) ";
        String data; 

        try { 
            Workbook workbook = Workbook.getWorkbook( new File( xls ) );
            //recorre todas las hojas
            for ( int sheetNo = 0; sheetNo < workbook.getNumberOfSheets(); sheetNo++ ) 
            {
                //obtiene una hoja 
                Sheet hoja = workbook.getSheet( sheetNo ); 
                System.out.println("Titulo: " + workbook.getSheet(sheetNo).getName());
                //recorrea todas las filas
                for ( int fila = 0; fila < hoja.getRows(); fila++ )
                {           
                    //recorre solo la columna 1 y 2, la columna 0 que corresponde al ID no nos interesa
                    for ( int columna = 2; columna  > 0 ; columna-- )
                    {
                        //se extrae contenido de celda y se convierte a minuscula
                        data = hoja.getCell(columna, fila).getContents().toLowerCase() ;  

                        if( columna == 1 && data.length() > 0 )
                        {   //se elimina palabra "SR(A) " de string 
                            data = data.substring( tmp.length() , data.length() );                                                              
                            data = toTitle( data ); //se convierte cadena "EJEMPLO" a "Ejemplo"
                            System.out.println( " " +  data ); //Se imprime 
                        }else if( columna == 2 && data.length() > 0 )  //profesion
                        {
                            data = toTitle( data );//se convierte cadena "EJEMPLO" a "Ejemplo"
                            data = Abreviar( data );//Se busca su abreviatura
                            System.out.print( "> " +  data ); //se imprime 
                        }
                    }                    
                }
            }

        } catch (IOException ex) {
            System.err.println( ex.getMessage() );
        } catch (BiffException ex) {
            System.err.println( ex.getMessage() );
        }
    }

    /**
 * Retorna la abreviación de una palabra caso contrario retorna un string
 * @param String word palabra a abreviar
 * @return String Abreviatura de palabra
 */
    private String Abreviar( String word ){        
        for (Map.Entry e : profesiones.entrySet()) {            
            if( e.getKey().toString().equals( word.trim() ) )
            {                
                return e.getValue().toString();                
            }            
        }
        return "Sr(a)";
    }    

    /**
 * Formatea un string de la forma "cadena" a "Cadena"
 * @param String cad palabra
 * @return String resultado de conversion
 */
    private String toTitle( String cad )
    {
        String word;
        //convierte en array
        String aux[] = cad.split(" "); 
        cad = ""; // se limpia cadena
        for( int i=0; i<aux.length; i++ )
        { 
            word = aux[i];
            word = word.substring(0,1).toUpperCase() + word.substring(1,word.length() );
            cad += word + " ";
        }        
        return cad;
    }

}//-->fin clase

Implementando la clase

public class Main {

    /**
 * @param args the command line arguments
 */
    public static void main(String[] args) {        
        Xexcel xl = new Xexcel();
        xl.formatear("E:\\Libro1.xls" );        
    }
}

y su resultado:

run:
Titulo: Hoja1
> Dr. Maria Dolores Del Orto 
> Ing. Debora Teste 
> Dr. Ester Mosobicho 
> Mtro. Olga Disima De Loyo 
> Arq. Armando Bronca Segura 
> Arq. Solomeo Paredes 
> Bq. Keko Jones 
> Adm. Rozamel Fierro 
> Adm. Lucas Trado 
> Ing. Aquiles Pinto Paredes 
> Bq. Rodrigo Melo Rosa 
> Dr. Paola Chupabola 
> Dr. Dolores Delano 
> Ing. Ana Mier De Cilla 
> Ing. Ana Pulpito Salido 
> Mtro. Ester Mosobicho 
Titulo: Hoja2
Titulo: Hoja3

No esta testeada completamente pero me salvo de ese problemilla y lo publico tal cual esta ahora porque sino se me olvida y se pierde 🙂

Enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Guía básica: Trabajando con GitHub y Netbeans

Guía básica: Trabajando con GitHub y Netbeans

Netbeans tiene soporte para trabajar con varias herramientas de control de versiones, GIT es una de ellas, esta herramie...

Abrir enlace web desde JLabel con Java

Abrir enlace web desde JLabel con Java

El siguiente código te permite abrir enlaces web desde un JLabel, ademas aprovechando el soporte a etiquetas HTML del co...

Hola mundo en Netbeans

Hola mundo en Netbeans

De los diferentes IDE’s que existen para crear aplicaciones para android, lamentablemente Netbeans es una de las m...

Procedimientos almacenados en java

Procedimientos almacenados en java

En este tuto realizaremos la implementación y ejecución de procedimientos almacenados de MySQL en Java, si quieres darle...

Métodos GET y POST en RestFul y JSON

Métodos GET y POST en RestFul y JSON

En este post veremos como enviar solicitudes GET y POST a un API RestFul  desde un dispositivo con android. Nuestra apli...

JSpinner: Cambiar color de fondo y fuente

JSpinner: Cambiar color de fondo y fuente

Un JSpinner es un componente swing de java con una caja de texto y un par de botones que nos permiten incrementar  y dec...

8 comentarios en “Formateo de registros en Excel con JExcel”

  1. Carlos dice:

    Muchas gracias :’D

  2. Kamilo dice:

    puedes explicar bien cada parametro la verdad no se entiende ta como para copiar pegar pero no enseñas nada solo pocos comentarios vagos para entender un poko

  3. Javier Flores dice:

    hola JMouse continuaras con el proyecto de control de Stock o ya lo dejaste por que la verda se ve muy inreresante de antemano gracias

  4. Eduardo dice:

    Excelente información amigo. Pero quería saber si me puedes ayudar con el tamaño de las imágenes es que ya pruebo muchas y no me sale.

  5. Fandelo dice:

    Muy bien explicado gracias por compartir y preparar este material
    excelente

  6. leo dice:

    Hola.
    Me puedes enviar el codigo del proyecto “Crear archivos JNLP con Netbeans”
    Seria muy interesante que todos los proyectos se pudiera descargar el codigo.

  7. cheke dice:

    Excelente ejemplo me preguntaba si tienes un ejemplo de realizar menus para cambiar el color de jframe usando look and feel…..

  8. ZeusAFK dice:

    Seria bueno uno donde expliques asimetrica y pki 🙂

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

En un post anterior vimos como usar la herramienta XJC del JDK para generar clases java desde esquemas XSD (XML Schema D...

Kali Linux es un sistema operativo de pruebas de intrusión con una gran colección de herramientas forenses y de segurida...

XJC es una herramienta de linea de comandos del compilador de esquemas de JAXB que se puede utilizar para convertir un e...

En este post realizaremos un pequeño ejemplo de validación de archivos XML utilizando el esquema XSD y el lenguaje PHP (...

Android Bolivia

MAUS