Рубрики
Без рубрики

Apache POI – Чтение и запись файла Excel на Java

– Apache POI – Чтение и запись файла Excel на Java

В этой статье мы обсудим, как читать и записывать файл excel с помощью Apache POI

1. Основные определения библиотеки POI Apache

В этом разделе кратко описываются основные классы, используемые во время чтения и записи Excel.

  1. HSSF имеет префикс перед именем класса для обозначения операций, связанных с файлом Microsoft Excel 2003.
  2. XSSF имеет префикс перед именем класса для обозначения операций, связанных с файлом Microsoft Excel 2007 или более поздней версии.
  3. XSSFWorkbook и HSSFWorkbook являются классами, которые действуют как книга Excel
  4. HSSFSheet и XSSFSheet являются классами, которые действуют как рабочий лист Excel
  5. Строка определяет строку Excel
  6. Ячейка определяет ячейку Excel, адресованную по ссылке на строку.

2. Скачать POI Apache

Библиотека POI Apache легко доступна с помощью зависимостей Maven.

  
    org.apache.poi
    poi-ooxml
    3.15
  

3. Библиотека POI Apache – Написание простого Excel

Приведенный ниже код показывает, как написать простой файл Excel с использованием библиотек POI Apache. Код использует 2-мерный массив данных для хранения данных. Данные записываются в объект XSSFWorkbook . XSSFSheet

package com.mkyong;

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");
    }
}

При выполнении приведенного выше кода вы получите результат ниже excel в качестве вывода.

4. Библиотека POI Apache – Чтение файла Excel

Приведенный ниже код объясняет, как читать файл Excel с помощью библиотек POI Apache. Функция получить перечисление типов ячеек устарела в версии 3.15 и будет переименована в getCellType начиная с версии 4.0 и далее.

package com.mkyong;

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();
        }

    }
}

При выполнении приведенного выше кода вы получите следующий вывод.

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--

Рекомендации

  1. Подробная информация об устаревании getCellTypeEnum
  2. Ссылка на POI Apache относительно амортизации
  3. Апач ПОИ Мавен Апач ПОИ Мавен
  4. Документы API POI Apache

Оригинал: “https://mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/”