A arquitetura permite a criação de planilhas do Excel utilizando JavaServer Faces. Para isso, é necessário criar um managed bean que estende AbstractExcelMBean
e sobrescrever os métodos getFileName()
e buildExcelDocument()
. Tal serviço utiliza em sua implementação as bibliotecas Apache POI e o componente AbstractExcelView do Spring.
O método getFileName()
deve retornar o nome do arquivo Excel que será gerado e o método buildExcelDocument()
deverá montar a planilha de acordo com a API do Apache POI. Um tutorial exemplo pode ser encontrado no artigo Excelling in Excel with Java. Para utilizar o managed bean criado para a geração da planilha, é necessário apenas que o desenvolvedor crie um link para a action #{ nomeManagedBean.buildSheet }.
Como exemplo, foi criado um managed bean para gerar uma planilha que mostra os papéis cadastrados no sistema e sua descrição.
@Component @Scope("request") public class DescricaoPapeisExcelMBean extends AbstractExcelMBean { @Override protected String getFileName() { return "papeis.xls"; } @Override protected void buildExcelDocument(HSSFWorkbook wb) throws Exception { HSSFSheet sheet = wb.createSheet(); // Adicionando Estilo HSSFCellStyle style = wb.createCellStyle(); HSSFFont negrito = wb.createFont(); negrito.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); style.setFont(negrito); HSSFRow cabecalho = sheet.createRow(0); HSSFCell nome = cabecalho.createCell((short) 0); nome.setCellStyle(style); setText(nome, "Nome"); HSSFCell descricao = cabecalho.createCell((short) 1); descricao.setCellStyle(style); setText(descricao, "Descrição"); // Percorrendo lista de papéis e adicionando linhas int i = 1; Collection<Papel> papeis = getDAO(PermissaoDAO.class).findAll(Papel.class); for (Papel papel : papeis) { HSSFRow row = sheet.createRow(i); // Cria primeira coluna HSSFCell cell1 = row.createCell((short) 0); setText(cell1, papel.getNome()); // Cria a segunda coluna HSSFCell cell2 = row.createCell((short) 1); setText(cell2, papel.getDescricao()); i++; } } }
Para gerar o XLS referente à classe acima, basta adicionar um link para a action buildSheet
do managed bean.
<h:form> <h:commandLink action="#{descricaoPapeisExcelMBean.buildSheet}" value="Gerar XLS"/> </h:form>
A planilha gerada será parecida com a da figura abaixo.