Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Ejercicios / Java / Formateo de registros en Excel con JExcel

Formateo de registros en Excel con JExcel

Por 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 https://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

Artículos similares

ArrayDeque: Cola doblemente terminada

Una cola doblemente terminada o deque es una estructura de datos lineal que permite insertar y eliminar elementos por am[...]

Componente swing jcMousePanel v1.6.9

Agregar una imagen a un jpanel o a un jframe no es complicado pero para un programador novato puede convertirse en todo[...]

Añadir Splash Screen en Java/Netbeans

¿Splash Screen? El splash screen o traducido al aspañol 😉  es una «Pantalla de bienvenida» que se muestra cuando se ejec[...]

Laravel 12 Theming Multi-Dominio: Cómo Servir Múltiples Diseños con un Solo Backend Monolítico

El tema que trataremos en este post es la implementación de una arquitectura de temas dinámicos (theming) dentro de un p[...]

Ejecutar JAR con parámetros de entrada

Java nos permite pasar parámetros a una aplicación empaquetada en un *.JAR mediante el MAIN de nuestro programa, pero cl[...]

Operador de Complemento bit a bit «~»

Operador de Complemento bit a bit unario Entre los operadores a nivel de bits de uso más común en java tenemos al operad[...]