Apache POI - Lesen und Schreiben einer Excel-Datei in Java

Apache POI - Lesen und Schreiben von Excel-Dateien in Java

In diesem Artikel wird erläutert, wie Sie eine Excel-Datei mitApache POI lesen und schreiben

1. Grundlegende Definitionen für die Apache POI-Bibliothek

In diesem Abschnitt werden kurz die grundlegenden Klassen beschrieben, die beim Lesen und Schreiben in Excel verwendet werden.

  1. HSSF wird vor dem Klassennamen vorangestellt, um Vorgänge anzuzeigen, die sich auf eine Microsoft Excel 2003-Datei beziehen.

  2. XSSF wird vor dem Klassennamen vorangestellt, um Vorgänge anzuzeigen, die sich auf eine Microsoft Excel 2007-Datei oder höher beziehen.

  3. XSSFWorkbook undHSSFWorkbook sind Klassen, die als Excel-Arbeitsmappe fungieren

  4. HSSFSheet undXSSFSheet sind Klassen, die als Excel-Arbeitsblatt fungieren

  5. Row definiert eine Excel-Zeile

  6. Cell definiert eine Excel-Zelle, die in Bezug auf eine Zeile adressiert ist.

2. Laden Sie den Apache POI herunter

Die Apache POI-Bibliothek ist mithilfe von Maven-Abhängigkeiten leicht verfügbar.

pom.xml

  
    org.apache.poi
    poi-ooxml
    3.15
  

3. Apache POI-Bibliothek - Schreiben eines einfachen Excel

Der folgende Code zeigt, wie eine einfache Excel-Datei mit Apache POI-Bibliotheken geschrieben wird. Der Code verwendet ein zweidimensionales Datenarray, um die Daten zu speichern. Die Daten werden in einXSSFWorkbook-Objekt geschrieben. XSSFSheet ist das Arbeitsblatt, an dem gearbeitet wird. Der Code ist wie folgt:

ApachePOIExcelWrite.java

package com.techfou;

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;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class ApachePOIExcelWrite {

    private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";

    public static void main(String[] args) {

        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Datatypes in Java");
        Object[][] datatypes = {
                {"Datatype", "Type", "Size(in bytes)"},
                {"int", "Primitive", 2},
                {"float", "Primitive", 4},
                {"double", "Primitive", 8},
                {"char", "Primitive", 1},
                {"String", "Non-Primitive", "No fixed size"}
        };

        int rowNum = 0;
        System.out.println("Creating excel");

        for (Object[] datatype : datatypes) {
            Row row = sheet.createRow(rowNum++);
            int colNum = 0;
            for (Object field : datatype) {
                Cell cell = row.createCell(colNum++);
                if (field instanceof String) {
                    cell.setCellValue((String) field);
                } else if (field instanceof Integer) {
                    cell.setCellValue((Integer) field);
                }
            }
        }

        try {
            FileOutputStream outputStream = new FileOutputStream(FILE_NAME);
            workbook.write(outputStream);
            workbook.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Done");
    }
}

Wenn Sie den obigen Code ausführen, wird Excel als Ausgabe angezeigt.

apache-poi-read-write-excel

4. Apache POI-Bibliothek - Lesen einer Excel-Datei

Der folgende Code erläutert das Lesen einer Excel-Datei mithilfe von Apache POI-Bibliotheken. Die FunktiongetCellTypeEnum ist in Version 3.15 veraltet und wird ab Version 4.0 ingetCellType umbenannt.

ApachePOIExcelRead.java

package com.techfou;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;

public class ApachePOIExcelRead {

    private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";

    public static void main(String[] args) {

        try {

            FileInputStream excelFile = new FileInputStream(new File(FILE_NAME));
            Workbook workbook = new XSSFWorkbook(excelFile);
            Sheet datatypeSheet = workbook.getSheetAt(0);
            Iterator iterator = datatypeSheet.iterator();

            while (iterator.hasNext()) {

                Row currentRow = iterator.next();
                Iterator cellIterator = currentRow.iterator();

                while (cellIterator.hasNext()) {

                    Cell currentCell = cellIterator.next();
                    //getCellTypeEnum shown as deprecated for version 3.15
                    //getCellTypeEnum ill be renamed to getCellType starting from version 4.0
                    if (currentCell.getCellTypeEnum() == CellType.STRING) {
                        System.out.print(currentCell.getStringCellValue() + "--");
                    } else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {
                        System.out.print(currentCell.getNumericCellValue() + "--");
                    }

                }
                System.out.println();

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe.

Datatype--Type--Size(in bytes)--
int--Primitive--2.0--
float--Primitive--4.0--
double--Primitive--8.0--
char--Primitive--1.0--
String--Non-Primitive--No fixed size--