Uma biblioteca Java moderna e intuitiva para importar e exportar arquivos Excel usando a biblioteca Fast Excel com uma interface Fluent API.
- ā 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
- Java 11+
- Fast Excel 0.19.0
- Jackson 2.15.2
- Apache Commons Lang 3.12.0
- Apache Commons IO 2.11.0
Baixe o projeto, e reutilize o pacote.
// 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();// 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"));
});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);List<Map<String, Object>> dados = // seus dados aqui
File arquivo = api.exportTo(dados)
.withHeaders("Coluna1", "Coluna2", "Coluna3")
.toSheet("MinhaPlanilha")
.toFile("arquivo.xlsx")
.export();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();try (FileOutputStream fos = new FileOutputStream("arquivo.xlsx")) {
api.exportTo(dados)
.withHeaders("Coluna1", "Coluna2")
.toStream(fos)
.export();
}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();List<Map<String, String>> dados = api.importFrom("arquivo.xlsx")
.fromSheet("Planilha1")
.hasHeader(true)
.asMaps();// 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;
});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();List<String[]> dados = api.importFrom("arquivo.xlsx")
.transformCells(value -> {
// Converter para maiĆŗsculas
return value != null ? value.toUpperCase() : value;
})
.asStringArrays();public class Funcionario {
private String nome;
private int idade;
private String cargo;
private double salario;
// Construtores, getters e setters
}public class Produto {
private String nome;
private double preco;
private String categoria;
// Construtores, getters e setters
}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();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());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();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();
}- 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
- 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
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanƧas (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto estƔ licenciado sob a LicenƧa MIT - veja o arquivo LICENSE para detalhes.
Para suporte e dúvidas, abra uma issue no repositório do projeto.