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
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!!!
En esta ocasión vemos un ejemplo sencillo de como usar Tile Map en nuestros juegos android con la librería LibGDX utiliz[...]
En este post, crearemos una aplicación java que nos permita arrastrar un archivo excel hacia la aplicación, abrirlo y ca[...]
Dando respuesta a una interrogante sobre el como crear objetos en tiempo de ejecución y como manipular estos, desarrolle[...]
Continuando con el desarrollo de la aplicación (Parte 1), abrimos Netbeans y creamos un nuevo proyecto al que llamaremos[...]
Cuando programamos visualmente desde Netbeans, el IDE nos ayuda mucho al generar rapidamente código predefinido, sin emb[...]
En este ejemplo tenemos un array en JSON el cual representa una lista de alumnos y queremos llevar este a una lista en j[...]