Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Implementação do itemReader para arquivos xlsx?

Olá como seria a implementação o itemReader para arquivos do tipo xlsx? Criei algumas classes que realizam a leitura de uma planilha usando apache poi, gostaria de utilizar o Spring Batch para o processamento.

1 resposta
solução!

Olá, Marcos. Tudo bem?

Para implementar um ItemReader que lê arquivos do tipo XLSX usando o Spring Batch, você pode integrar a biblioteca Apache POI para manipular o Excel e criar um leitor personalizado. Aqui está um exemplo básico de como você pode fazer isso:

Primeiro, precisa ter a dependência do Apache POI em seu projeto. Se estiver usando Maven, adicione ao seu pom.xml:

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

Em seguida, você pode criar uma classe que implemente a interface ItemReader do Spring Batch. Aqui está um exemplo simplificado:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.batch.item.ItemReader;

import java.io.FileInputStream;
import java.io.IOException;

public class ExcelItemReader implements ItemReader<MyDataType> {

    private final String filePath;
    private Workbook workbook;
    private Sheet sheet;
    private int currentRow = 0;

    public ExcelItemReader(String filePath) {
        this.filePath = filePath;
        initialize();
    }

    private void initialize() {
        try (FileInputStream fis = new FileInputStream(filePath)) {
            workbook = new XSSFWorkbook(fis);
            sheet = workbook.getSheetAt(0); // Lê a primeira aba
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public MyDataType read() {
        if (currentRow <= sheet.getLastRowNum()) {
            Row row = sheet.getRow(currentRow++);
            // Supondo que MyDataType tem um construtor que aceita valores de células
            MyDataType data = new MyDataType(
                row.getCell(0).getStringCellValue(),
                row.getCell(1).getNumericCellValue()
                // Continue para outras células conforme necessário
            );
            return data;
        } else {
            return null; // Retorna null para indicar que não há mais dados
        }
    }
}

Neste exemplo, MyDataType seria uma classe que você define para representar os dados que está lendo da planilha. Você precisará adaptar o código para corresponder à estrutura do seu arquivo XLSX e ao tipo de dados que está processando.

Finalmente, configure este ItemReader no seu job do Spring Batch.

Espero ter ajudado e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!