Criação de Planilhas em Excel

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.

Planilha Gerada

  • desenvolvimento/especificacoes/arquitetura/servicos/criacao_planilhas_excel.txt
  • Última modificação: 2017/04/03 18:10
  • (edição externa)