Convertire un file Excel in JSON con Java e Apache POI

Mattepuffo's logo
Convertire un file Excel in JSON con Java e Apache POI

Convertire un file Excel in JSON con Java e Apache POI

Di Apache POI ne abbiamo già parlato varie volte; si tratta di una libreria per Java che ci consente di manipolare i documenti di MS Office.

In questo articolo vediamo come usarla per leggere un file Excel e convertirlo in JSON.

Se usate Maven aggiungete queste dipendenze:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20240303</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.17.0</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.5</version>
</dependency>

Qui sotto un esempio funzionante che sto usando in produzione (con le dovute modifiche di miglioramento del codice) per un piccolo programmino:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Main {
  public static void main(String[] args) {
    String fileXls = "/home/utente/FORNITORI.xlsx";
    
    try (InputStream inputStream = new FileInputStream(fileXls)) {
      Workbook workbook = new XSSFWorkbook(inputStream);
      Sheet sheet = workbook.getSheetAt(0);
      String[] headers = new String[sheet.getRow(0).getLastCellNum()];
      JSONArray jsonArray = new JSONArray();

      for (Row row : sheet) {
        if (row.getRowNum() == 0) {
          for (int i = 0; i < row.getLastCellNum(); i++) {
            headers[i] = row.getCell(i).getStringCellValue();
          }
        } else {
          JSONObject obj = new JSONObject();
          for (int i = 0; i < row.getLastCellNum(); i++) {
            Cell currentCell = row.getCell(i);
            if (currentCell.getCellType() == CellType.STRING) {
              obj.put(headers[i], currentCell.getStringCellValue());
            } else if (currentCell.getCellType() == CellType.NUMERIC) {
              obj.put(headers[i], currentCell.getNumericCellValue());
            }
          }
          jsonArray.put(obj);
        }
      }

      System.out.println(jsonArray);

    } catch (IOException e) {
      System.out.println(e.getMessage());
    }
  }
}

Enjoy!


Condividi

Commentami!