Abrir un archivo de Excel (.csv) en Java

Hola a todos!, pues ya van varios que me preguntan como se abre un archivo de Excel con formato CSV en java, en especial me lo preguntan porque tengo este postdonde creo los archivos .csv desde Java con datos de un JTable.

En fin este post será corto y espero que les sirva!, ya que es mi lógica de hace rato (el ejemplo lo tengo desde hace rato pero no había posteado sobre ello), tal vez se pueda hacer de una mejor manera y de forma menos reburujada jaja.

Bueno para empezar vamos a crear un proyecto en netbeans y creamos un JFrame de la siguiente manera (con un JTable así de simple)

image

Y tambien agregamos un menu

image

En este caso solo usaremos el de Abrir, pero en fin empezemos.

Ya que tenemos nuestro JFrame con su JTable vamonos al codigo y escribiremos lo siguiente:

image

Lo importante aqui es crear el modelo DefaulTableModel para manejar nuestro JTable y en el constructor se lo asignamos al jTable1 que creamos en modo diseño, ademas creamos un booleano “bandera” con valor verdader, tal vez lo usemos mas delante.

image

Por buena práctica de programación, este programa que haremos solo abrirá y procesará archivos creados con el formato .CSV, es por eso que vamos a utilizar un filtro al momento de querer abrir el archivo.

Bueno en pocas palabras usamos JFileChooser para poder abrir un archivo de nuestro disco duro, creamos el objeto en la línea 36 y la línea 37 creamos el filtro de la clase FileNameExtensionFilter y se lo asignamos al JFileChooser que creamos en la línea 38. En la línea 39 seleccionamos el modo que vamos a seleccionar un archivo, como se puede ver será FILES_ONLY (solo archivos), obtenemos el resultado en la línea 40 (o sea si si se abrió un archivo o se dio en el botón cancelar), si si se abrió un archivo este método devolverá un objeto tipo File, y eso es lo que hacemos.

Este metodo que acabamos de crear es simplemente para obtener un archivo obligatoriamente con extencion .CSV, ahora vamos a crear otro metodo en el que vamos a procesar ese archivo.

Logica del algoritmo

La verdad este es un metodo complicado, y creanme que no sabré como explicarselos, ya que se procesa cada linea del archivo .CSV, es decir:

Un archivo CSV esta delimitado por comas, entonces si lo abrimos con un bloc de notas podemos encontrar algo asi

Titulo,Titulo2,Titulo3,

dato1,dato2,dato3,

etc,etc,etc,

Entonces lo que nosotros vamos a hacer es leer este archivo .csv y leer linea por linea y procesar esa linea como una cadena, utilizaremos SubStrings basandonos por las comas para determinar que secuencia de caracteres es un dato (o una celda en excel), a grandes rasgos el algoritmo que se “diseño” es:

Se lee la primer linea del archivo y lo tratamos como una cadena

cadena=”Titulo,Titulo2,Titulo3”  (por ejemplo)

ESta cadena la convertimos en un arreglo de caracteres para asi en un bucle analizar caracter por caracter hasta leer una “coma”.

Leer cadena hasta encontrar “coma”:

como es la primera vez que se lee una fila, entnoces es la de los titulos (por lo tanto lo guardamos para establecerlo como titulos en el JTable)

indice 0=’T’

indice 6=’coma’

Desde 0 hasta 5 crear una nueva cadena

nuevaCadena=”Titulo”

Basicamente esa es la logica que use para manejar estas cadenas, veamos el codigo:

Codigo

image

OJO, EL CODIGO ESTA PROBADO SIRVE PORQUE SIRVE

Les digo esto por que siempre me mandan cmoentarios (que no me molestan) pero me dicen que los datos los lee mal, o no los muestra bien, etc el codigo funciona bien!.

Ya lo que falta es crear un evento dando doble clic al menu item que dice “Abrir” y escribimos lo siguiente:

image

Y el resultado!:

image

Saludos!

Anuncios

26 comentarios sobre “Abrir un archivo de Excel (.csv) en Java

  1. Hola Issac, una consulta al respecto en donde debo poner los codigos de las imagenes 4 y 5 dado que e probado en el Main y en el MainFrame y no consigo que me funcione.

    1. Que onda Patricio,

      Mira van en el MainFrame, porque son metodos de esa misma clase, tengo buenos libros de programacion en Java para que indagues mas, si quieres te los paso porq esto se deberia de deducir; Como cada clase que se usa de la API de Java se tiene que importar al inicio del archivo .java, lo hiciste?, estos son los imports necesarios:

      import java.io.BufferedReader;
      import java.io.File;
      import java.io.FileReader;
      import java.io.IOException;
      import java.util.ArrayList;
      import javax.swing.JFileChooser;
      import javax.swing.JOptionPane;
      import javax.swing.filechooser.FileNameExtensionFilter;
      import javax.swing.table.DefaultTableModel;

      espero y sea eso… saludos y gracias por visitar mi blog 🙂

  2. Estoy acostumbrado a que Netbeans me autocomplete los imports, aqui les van los que usamos, una disculpa.

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import javax.swing.JFileChooser;
    import javax.swing.JOptionPane;
    import javax.swing.filechooser.FileNameExtensionFilter;
    import javax.swing.table.DefaultTableModel;

  3. Hola buenas Tardes,
    Tengo un problema similar a este post, resulta que tengo que crear una aplicación que lea un archivo .csv desde java y lo convierta en una base de datos en cualquier manejador, no importa que no se visualice el achivo en la aplicación, lo importante es seleccionar el archivo con un JFileChooser pero debe de crearse la base de datos mediante este archivo.
    Algo así como tener un menu->Archivo->Abrir
    luego tener como especie de un boton que cree la base de datos una vez cargado el archiv .csv

  4. Hola Buenos días,
    Tengo un inconveniente subi un archivo .csv pero necesito que me llene la base de datos he intentado varios metodos pero ninguno me ha funcionado si alguien sabe como puedo hacerlo mil gracias…

    Un saludo para todos!!!

  5. hola isacc lo q pasa es que mire tu codigo y si abre los archivos de excel pero solo pone la primera fila por ejemplo si tu archivo de excel tiene varias filas al momento de abrirlo en java en un jtable solo sale la primera fila y si quieor abrir otro archivo se pega encima de el anterior archivo q abri porfa ayudame sii garciass

  6. hola a todos.
    alguien me puede ayudar de como puedo hacer para abrir un archivo de excel en java y mostrarlo en una JTable ??
    ejemplo: libro1.xls,

  7. Estaba probando el codigo, pero lo que me pasa es que no me muestra nada en la tabla cuando doy clic en el archivo y me lo abre, estaba pensado si faltaba algo como que lleve el modelo a la tabla jTable1.setModel(modeloTabla);

    1. No sale ningún error, estaba pensando que en el procesarCsv, puede faltar que lleve el modelo a la tabla, muchas gracias y disculpa la molestia.

  8. buenas, quería hacerte un comentario: cuando guardo en un archivo 2 columnas y luego recupero el archivo para introducirlo en un jtable, me duplica el número de columnas (agrega 2 columnas más en blanco). Está claro que no es el comportamiento deseado, pero no me doy cuenta por qué lo hace.
    ¿podrás ver por qué?
    Muchas gracias

  9. Tengo una pregunta, el codigo me funciona a la perfeccion, pero me gustaria q mis cabezeras no se perdieran, me explico.
    Tengo una no modelo de tabla tipo excel(muchas celdas por default) y me gustaria que al abrir un csv, no perdiera mis cabezeras, como consigo eso cn tu codigo??

  10. Hola buenas tardes tengo un proyecto que debe de leer un archivo de excel de entrada de una tabla con varios datos el cual quiero que solo me lea dos columnas especificamente y me lo arroje en otra pagina de excel para ahi con esa tabla realizar unas operaciones de series de fourier y ya me arroje la completa llena de los datos como puedo manipular a excel para realizar las operaciones automaticamente

  11. jesus1987

    Buenas tardes Issac la verdad es un gran aporte soy estudiante y para mi proyecto final necesito que un boton imprima solo el arcivo de excel yo no quiero modificar ni agregar nada solo deseo que cuando de imprimir en el boton imprima un archivo que esta en excel me podrias ayudar con eso te lo agradeceria mucho

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s