Skip to content

claytim/fluent-api-fast-excel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Ā 

History

5 Commits
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 

Repository files navigation

Excel Fluent API

Uma biblioteca Java moderna e intuitiva para importar e exportar arquivos Excel usando a biblioteca Fast Excel com uma interface Fluent API.

CaracterĆ­sticas

  • āœ… Fluent API: Interface intuitiva e encadeĆ”vel
  • āœ… Fast Excel: Biblioteca de alto desempenho para processamento de Excel
  • āœ… MĆŗltiplos formatos de saĆ­da: Arrays, Mapas, Objetos Java
  • āœ… Mapeamento automĆ”tico: ReflexĆ£o para mapear dados para objetos
  • āœ… Configuração flexĆ­vel: Personalização completa do comportamento
  • āœ… Filtros e transformaƧƵes: Processamento de dados durante importação/exportação
  • āœ… Suporte a mĆŗltiplas planilhas: Importação e exportação de vĆ”rias abas
  • āœ… Tratamento de erros: ExceƧƵes personalizadas e informativas

DependĆŖncias

  • Java 11+
  • Fast Excel 0.19.0
  • Jackson 2.15.2
  • Apache Commons Lang 3.12.0
  • Apache Commons IO 2.11.0

Instalação

Baixe o projeto, e reutilize o pacote.

Uso RƔpido

Exportação Simples

// Criar dados
List<Map<String, Object>> dados = Arrays.asList(
    Map.of("Nome", "João Silva", "Idade", 30, "Cidade", "São Paulo"),
    Map.of("Nome", "Maria Santos", "Idade", 25, "Cidade", "Rio de Janeiro")
);

// Exportar para Excel
ExcelFluentAPI api = ExcelFluentAPI.create();
File arquivo = api.exportTo(dados)
        .withHeaders("Nome", "Idade", "Cidade")
        .toSheet("Pessoas")
        .toFile("pessoas.xlsx")
        .export();

Importação Simples

// Importar dados do Excel
List<Map<String, String>> dados = api.importFrom("pessoas.xlsx")
        .fromSheet("Pessoas")
        .hasHeader(true)
        .asMaps();

// Processar dados
dados.forEach(row -> {
    System.out.println("Nome: " + row.get("Nome") + ", Idade: " + row.get("Idade"));
});

Guia Completo

1. Configuração

A API permite configuração personalizada para diferentes cenÔrios:

// Configuração padrão
ExcelConfig config = ExcelConfig.create();

// Configuração otimizada para importação
ExcelConfig configImport = ExcelConfig.forImport()
    .skipEmptyRows(true)
    .skipHeaderRow(false)
    .validateData(true);

// Configuração otimizada para exportação
ExcelConfig configExport = ExcelConfig.forExport()
    .createHeaderRow(true)
    .autoResizeColumns(true)
    .withDateFormat("dd/MM/yyyy");

// Criar API com configuração
ExcelFluentAPI api = ExcelFluentAPI.create(config);

2. Exportação

Exportação BÔsica

List<Map<String, Object>> dados = // seus dados aqui

File arquivo = api.exportTo(dados)
    .withHeaders("Coluna1", "Coluna2", "Coluna3")
    .toSheet("MinhaPlanilha")
    .toFile("arquivo.xlsx")
    .export();

Exportação com Mapeamento Personalizado

List<Produto> produtos = // lista de produtos

File arquivo = api.exportTo(produtos, produto -> Map.of(
        "Nome", produto.getNome(),
        "PreƧo", produto.getPreco(),
        "PreƧo com Imposto", produto.getPreco() * 1.1
    ))
    .withHeaders("Nome", "PreƧo", "PreƧo com Imposto")
    .toFile("produtos.xlsx")
    .export();

Exportação para OutputStream

try (FileOutputStream fos = new FileOutputStream("arquivo.xlsx")) {
    api.exportTo(dados)
        .withHeaders("Coluna1", "Coluna2")
        .toStream(fos)
        .export();
}

3. Importação

Importação como Arrays

List<String[]> linhas = api.importFrom("arquivo.xlsx")
    .fromSheet("Planilha1")
    .startingFromRow(2)  // comeƧar da linha 2
    .endingAtRow(100)    // parar na linha 100
    .hasHeader(true)
    .asStringArrays();

Importação como Mapas

List<Map<String, String>> dados = api.importFrom("arquivo.xlsx")
    .fromSheet("Planilha1")
    .hasHeader(true)
    .asMaps();

Importação com Mapeamento para Objetos

// Usando reflexão automÔtica
List<Funcionario> funcionarios = api.importFrom("funcionarios.xlsx")
    .fromSheet("Funcionarios")
    .hasHeader(true)
    .asObjects(Funcionario.class);

// Usando mapper personalizado
List<Funcionario> funcionarios = api.importFrom("funcionarios.xlsx")
    .fromSheet("Funcionarios")
    .hasHeader(true)
    .asObjects(rowData -> {
        Funcionario f = new Funcionario();
        f.setNome(rowData.get("Nome"));
        f.setIdade(Integer.parseInt(rowData.get("Idade")));
        return f;
    });

4. Filtros e TransformaƧƵes

Filtro de Linhas

List<String[]> dados = api.importFrom("arquivo.xlsx")
    .filterRows(row -> {
        // Manter apenas linhas onde a primeira coluna não estÔ vazia
        return row[0] != null && !row[0].trim().isEmpty() ? row : null;
    })
    .asStringArrays();

Transformação de Células

List<String[]> dados = api.importFrom("arquivo.xlsx")
    .transformCells(value -> {
        // Converter para maiĆŗsculas
        return value != null ? value.toUpperCase() : value;
    })
    .asStringArrays();

5. Classes de Exemplo

Classe Funcionario

public class Funcionario {
    private String nome;
    private int idade;
    private String cargo;
    private double salario;
    
    // Construtores, getters e setters
}

Classe Produto

public class Produto {
    private String nome;
    private double preco;
    private String categoria;
    
    // Construtores, getters e setters
}

Exemplos AvanƧados

Processamento de MĆŗltiplos Arquivos

List<File> arquivos = Arrays.asList(
    new File("arquivo1.xlsx"),
    new File("arquivo2.xlsx"),
    new File("arquivo3.xlsx")
);

List<Funcionario> todosFuncionarios = new ArrayList<>();

for (File arquivo : arquivos) {
    List<Funcionario> funcionarios = api.importFrom(arquivo)
        .fromSheet("Funcionarios")
        .hasHeader(true)
        .asObjects(Funcionario.class);
    
    todosFuncionarios.addAll(funcionarios);
}

// Exportar todos os funcionƔrios consolidados
api.exportTo(todosFuncionarios)
    .withHeaders("Nome", "Idade", "Cargo", "Salario")
    .toFile("funcionarios_consolidados.xlsx")
    .export();

Validação de Dados

List<Funcionario> funcionarios = api.importFrom("funcionarios.xlsx")
    .fromSheet("Funcionarios")
    .hasHeader(true)
    .asObjects(Funcionario.class)
    .stream()
    .filter(f -> f.getIdade() >= 18 && f.getIdade() <= 65)
    .filter(f -> f.getSalario() > 0)
    .collect(Collectors.toList());

Exportação com Formatação

ExcelConfig config = ExcelConfig.forExport()
    .withDateFormat("dd/MM/yyyy")
    .withNumberFormat("#,##0.00")
    .autoResizeColumns(true);

ExcelFluentAPI api = ExcelFluentAPI.create(config);

api.exportTo(dados)
    .withHeaders("Data", "Valor", "Descrição")
    .toSheet("Relatório")
    .toFile("relatorio_formatado.xlsx")
    .export();

Tratamento de Erros

A API lanƧa ExcelProcessingException para erros especƭficos:

try {
    List<Funcionario> funcionarios = api.importFrom("arquivo.xlsx")
        .fromSheet("Funcionarios")
        .asObjects(Funcionario.class);
} catch (ExcelProcessingException e) {
    System.err.println("Erro ao processar arquivo Excel: " + e.getMessage());
    e.printStackTrace();
}

Performance

  • Fast Excel: Biblioteca de alto desempenho para processamento de arquivos grandes
  • Streaming: Processamento eficiente de memória para arquivos grandes
  • Configuração otimizada: ConfiguraƧƵes prĆ©-definidas para diferentes cenĆ”rios

LimitaƧƵes

  • Suporte apenas para arquivos Excel (.xlsx)
  • Mapeamento por reflexĆ£o requer construtores padrĆ£o
  • Algumas funcionalidades avanƧadas do Excel nĆ£o sĆ£o suportadas

Contribuição

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanƧas (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

LicenƧa

Este projeto estƔ licenciado sob a LicenƧa MIT - veja o arquivo LICENSE para detalhes.

Suporte

Para suporte e dúvidas, abra uma issue no repositório do projeto.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages