Hola.
La API de Java no incluye librerías para acceder a tipos de datos de Microsoft, así que hay que usar librerías de terceros.
Para esto, la más conocida(al menos la que yo conozco) es
Apache Poi.
Desde su web puedes obtener la última versión, documentación sobre su API, etc....
Sin embargo, para usar su última versión hay que construir la librería usando Gradle y es más complicado y hasta yo me pierdo con eso.
Tengo unos archivos .jar de esta librería listos para ser usados. Son una versión antigua, pero bueno, sirven igualmente.
Se pueden descargar desde este
enlace DrivePara usarlos en tu proyecto Java, lo que tienes que hacer es copiarlos a una carpeta dentro de tu proyecto. Puedes llamar a esa carpeta como quieras, lo habitual es llamarla "lib", para indicar que ahí contenemos unas librerías.
Luego, para que tu proyecto pueda usarlas, tienes que "construir una ruta"(build path) hacia ellas.
La forma de hacer esto puede variar según el IDE que estés usando. Por ejemplo en Eclipse, el que yo uso, la opción es
"Build Path" > "Add External Archives"Y entonces se abre un explorador de archivos donde seleccionar los .jar de Apache Poi.
Una vez hecho esto, ya podemos hacer import de las clases que necesitemos para interactuar con el Excel.
Un archivo Excel es bastante complejo, a parte de que los hay de distintos tipos(si son Excel antiguos de antes de mediados del año 2000 hay que usar la clase HSSF, si no hay que usar XSSF para los posteriores más actuales), un archivo Excel es como un
libro que se compone de una o más
hojas.
Y cada
hoja se compone de
filas.
Y cada
fila se compone de
celdas.
Así que para trabajar con el Excel, hay que crear objetos que representen cada uno de esos elementos.
Dejo un ejemplo muy sencillo para leer un Excel y volcar los datos en pantalla.
Fíjate que la lógica es muy simple.
Creamos un
libro a partir del fichero y de este
libro obtenemos un "iterador" para recorrer las
hojas que pueda tener.
Por cada
hoja, obtenemos otro "iterador" para recorrer las
filas que pueda tener.
Y por cada
fila, otro "iterador" para recorrer las
celdas.
Cada "iterador" lo recorremos mediante un bucle while, así que tenemos tres bucles anidados.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class LectorExcel {
public static void main(String[] args) {
File fichero = new File("e:/clientes.xlsx");
try {
//Leemos los bytes del fichero Excel y creamos un "libro de trabajo"
FileInputStream datosExcel = new FileInputStream(fichero);
XSSFWorkbook libroDeTrabajo = new XSSFWorkbook(datosExcel);
/*
* El "libro de trabajo" Excel está compuesto
* de una o más hojas(sheets).
* Creamos un Iterador para recorrerlas
*/
Iterator<Sheet> hojasLibro = libroDeTrabajo.sheetIterator();
while(hojasLibro.hasNext()) {
XSSFSheet hojaExcel = (XSSFSheet) hojasLibro.next();
System.out.println("\n\n\t\tNUEVA HOJA EXCEL. FILAS: " + hojaExcel.getPhysicalNumberOfRows());
System.out.println("\t\t----- ---- ------ ----------\n");
/*
* Cada hoja se compone de filas y cada fila se compone de celdas
* Habrá que iterar cada fila, y por cada fila iterar sus celdas
*/
Iterator<Row> filasExcel = hojaExcel.iterator();
while(filasExcel.hasNext()) {
Row fila = filasExcel.next();
//Tenemos una fila, vamos a por sus celdas
Iterator<Cell> celdasExcel = fila.cellIterator();
while(celdasExcel.hasNext()) {
Cell celda = celdasExcel.next();
/*
* Vamos a mostrar los datos de cada celda de esta fila.
* Pero antes de mostrar, tenemos que preguntar de qué tipo
* de dato se trata, pues puede ser numérico, cadena, fórmula, boolean...
* Y cada tipo de dato exige un método distinto para ser mostrado.
*
* En este ejemplo solo tendremos numéricos y cadenas.
*/
switch(celda.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.print(celda.getStringCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.print(celda.getNumericCellValue() + "\t\t");
break;
}
}
System.out.println();//Final de esta fila
}
}
libroDeTrabajo.close();
System.out.println("\n\n\t\tFIN DE PROGRAMA");
} catch (FileNotFoundException e) {
System.err.println("Fichero Excel no encontrado");
} catch (IOException e) {
System.err.println("Error al acceder archivo Excel");
}
}
}
Esto es solo un ejemplo básico. La librería Apache Poi es muy extensa y permite hacer muchas cosas.
Ahora que ya sabes lo que necesitas, sigue buscando tú mismo más ejemplos de uso para leer y modificar datos, y que sean más actualizados que el que yo he puesto.
Por ejemplo, el método que uso en el switch para comprobar el tipo de dato que contiene la celda, está obsoleto. Funciona, pero tiene que haber otro método o manera de hacerlo más actualizada.
Un saludo.