Lectura y escritura de datos en un archivo de Excel en Java usando Apache POI

En Java, leer un archivo de Excel no es similar a leer un archivo de Word debido a las celdas de un archivo de Excel. JDK no proporciona una API directa para leer datos de archivos de Excel para los que tenemos que cambiar a una biblioteca de terceros que es Apache POI. Apache POI es una biblioteca Java de código abierto diseñada para leer y escribir documentos de Microsoft con el fin de crear y manipular varios formatos de archivo basados ​​en Microsoft Office. Usando POI, uno debería poder realizar operaciones de creación, modificación y visualización/lectura en los siguientes formatos de archivo. 
Por ejemplo, Java no proporciona soporte integrado para trabajar con archivos de Excel, por lo que debemos buscar API de código abierto para el trabajo. Apache POI proporciona la API de Java para manipular varios formatos de archivo basados ​​en el estándar Office Open XML (OOXML) y el estándar OLE2 de Microsoft. Las versiones de Apache POI están disponibles bajo la Licencia de Apache (V2.0). 

Escribir un archivo de Excel 

Anteriormente presentamos Apache POI, una API de Java útil para interactuar con documentos de Microsoft Office. Ahora veremos cómo podemos leer y escribir en un archivo de Excel usando la API.

Procedimiento: Escribir un archivo usando POI es muy simple e involucra los siguientes pasos:

  1. Crear un libro de trabajo
  2. Crear una hoja en el libro
  3. Crear una fila en la hoja
  4. Agregar celdas en la hoja
  5. Repita los pasos 3 y 4 para escribir más datos.
  6. Cierra el flujo de salida.

Ejemplo:

Java

// Java Program to Illustrate Writing 
// Data to Excel File using Apache POI
  
// Import statements
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  
// Main class
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Blank workbook
        XSSFWorkbook workbook = new XSSFWorkbook();
  
        // Creating a blank Excel sheet
        XSSFSheet sheet
            = workbook.createSheet("student Details");
  
        // Creating an empty TreeMap of string and Object][]
        // type
        Map<String, Object[]> data
            = new TreeMap<String, Object[]>();
  
        // Writing data to Object[]
        // using put() method
        data.put("1",
                 new Object[] { "ID", "NAME", "LASTNAME" });
        data.put("2",
                 new Object[] { 1, "Pankaj", "Kumar" });
        data.put("3",
                 new Object[] { 2, "Prakashni", "Yadav" });
        data.put("4", new Object[] { 3, "Ayan", "Mondal" });
        data.put("5", new Object[] { 4, "Virat", "kohli" });
  
        // Iterating over data and writing it to sheet
        Set<String> keyset = data.keySet();
  
        int rownum = 0;
  
        for (String key : keyset) {
  
            // Creating a new row in the sheet
            Row row = sheet.createRow(rownum++);
  
            Object[] objArr = data.get(key);
  
            int cellnum = 0;
  
            for (Object obj : objArr) {
  
                // This line creates a cell in the next
                //  column of that row
                Cell cell = row.createCell(cellnum++);
  
                if (obj instanceof String)
                    cell.setCellValue((String)obj);
  
                else if (obj instanceof Integer)
                    cell.setCellValue((Integer)obj);
            }
        }
  
        // Try block to check for exceptions
        try {
  
            // Writing the workbook
            FileOutputStream out = new FileOutputStream(
                new File("gfgcontribute.xlsx"));
            workbook.write(out);
  
            // Closing file output connections
            out.close();
  
            // Console message for successful execution of
            // program
            System.out.println(
                "gfgcontribute.xlsx written successfully on disk.");
        }
  
        // Catch block to handle exceptions
        catch (Exception e) {
  
            // Display exceptions along with line number
            // using printStackTrace() method
            e.printStackTrace();
        }
    }
}

Leer un archivo de Excel

Procedimiento: La lectura de un archivo excel también es muy sencilla si la dividimos en pasos.

  1. Crear una instancia de libro de trabajo desde una hoja de Excel
  2. Llegar a la hoja deseada
  3. Incrementar número de fila
  4. iterar sobre todas las celdas en una fila
  5. repita los pasos 3 y 4 hasta leer todos los datos.
  6. Cierra el flujo de salida.

Ejemplo:

Java

// Java Program to Illustrate Reading
// Data to Excel File Using Apache POI
  
// Import statements
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
  
// Main class
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Try block to check for exceptions
        try {
  
            // Reading file from local directory
            FileInputStream file = new FileInputStream(
                new File("gfgcontribute.xlsx"));
  
            // Create Workbook instance holding reference to
            // .xlsx file
            XSSFWorkbook workbook = new XSSFWorkbook(file);
  
            // Get first/desired sheet from the workbook
            XSSFSheet sheet = workbook.getSheetAt(0);
  
            // Iterate through each rows one by one
            Iterator<Row> rowIterator = sheet.iterator();
  
            // Till there is an element condition holds true
            while (rowIterator.hasNext()) {
  
                Row row = rowIterator.next();
  
                // For each row, iterate through all the
                // columns
                Iterator<Cell> cellIterator
                    = row.cellIterator();
  
                while (cellIterator.hasNext()) {
  
                    Cell cell = cellIterator.next();
  
                    // Checking the cell type and format
                    // accordingly
                    switch (cell.getCellType()) {
  
                    // Case 1
                    case Cell.CELL_TYPE_NUMERIC:
                        System.out.print(
                            cell.getNumericCellValue()
                            + "t");
                        break;
  
                    // Case 2
                    case Cell.CELL_TYPE_STRING:
                        System.out.print(
                            cell.getStringCellValue()
                            + "t");
                        break;
                    }
                }
  
                System.out.println("");
            }
  
            // Closing file output streams
            file.close();
        }
  
        // Catch block to handle exceptions
        catch (Exception e) {
  
            // Display the exception along with line number
            // using printStackTrace() method
            e.printStackTrace();
        }
    }
}

Producción: 
 

Output

Geeks, ahora deben preguntarse qué sucede si necesitamos leer un archivo en una ubicación diferente, por lo que el siguiente ejemplo lo explica todo.

Ejemplo 1-A:

// Java Program to Read a File From Different Location

// Getting file from local directory
private static final String FILE_NAME
    = "C:\\Users\\pankaj\\Desktop\\projectOutput\\mobilitymodel.xlsx";

// Method
public static void write() throws IOException, InvalidFormatException 
{

    InputStream inp = new FileInputStream(FILE_NAME);
    Workbook wb = WorkbookFactory.create(inp);
    Sheet sheet = wb.getSheetAt(0);
    ........
}

Ejemplo 1-B:

// Reading and Writing data to excel file using Apache POI
// Via Appending to the Existing File

// Getting the path from the local directory
private static final String FILE_NAME
    = "C:\\Users\\pankaj\\Desktop\\projectOutput\\blo.xlsx";

// Method
public static void write() throws IOException, InvalidFormatException 
{

    InputStream inp = new FileInputStream(FILE_NAME);
    Workbook wb = WorkbookFactory.create(inp);
    Sheet sheet = wb.getSheetAt(0);

    int num = sheet.getLastRowNum();
    Row row = sheet.createRow(++num);
    row.createCell(0).setCellValue("xyz");
    .....
    ..

    // Now it will write the output to a file
    FileOutputStream fileOut = new FileOutputStream(FILE_NAME);
    wb.write(fileOut);

    // Closing the file connections
    fileOut.close();
}

Este artículo es una contribución de Pankaj Kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *