com.catexpress.util.FormatosPOI.java Source code

Java tutorial

Introduction

Here is the source code for com.catexpress.util.FormatosPOI.java

Source

package com.catexpress.util;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import com.catexpress.model.Dsolicitud;
import com.catexpress.model.Proveedor;
import com.catexpress.model.Solicitud;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.Set;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;
//http://www.journaldev.com/2562/apache-poi-tutorial

/**
 *
 * @author Othoniel
 */
public class FormatosPOI {

    final int TITULO = 0;
    final int USUARIO = 1;
    final int SUCURSAL = 2;
    final int LABEL = 3;
    final int FECHA = 4;
    final int AMARILLO = 5;
    final int COLUMNA = 6;
    final int SURTIDO = 7;

    public FormatosPOI() {
    }

    public void formatoSolicitud(Solicitud solicitud, Set<Proveedor> proveedores)
            throws FileNotFoundException, IOException {
        Workbook wb = new HSSFWorkbook();
        Sheet sheet;
        int cont = 0;
        for (Proveedor proveedor : proveedores) {
            sheet = wb.createSheet(proveedor.getNombre());
            Row rTitulo = sheet.createRow(0);
            CellRangeAddress craTitulo = new CellRangeAddress(0, //first row (0-based)
                    0, //last row  (0-based)
                    0, //first column (0-based)
                    6 //last column  (0-based)
            );
            sheet.addMergedRegion(craTitulo);
            Cell titulo = rTitulo.createCell(0);
            titulo.setCellValue("SOLICITUD DE MERCANC?A");
            titulo.setCellStyle(estiloHeader(wb, TITULO));
            rTitulo.setHeightInPoints(20);

            Row rUsuario = sheet.createRow(1);
            CellRangeAddress craUsuario = new CellRangeAddress(1, 1, 0, 6);
            sheet.addMergedRegion(craUsuario);
            Cell usuario = rUsuario.createCell(0);
            usuario.setCellValue((solicitud.getUsuario().getNombre() + " " + solicitud.getUsuario().getApPaterno()
                    + " " + solicitud.getUsuario().getApMaterno()).toUpperCase());
            usuario.setCellStyle(estiloHeader(wb, USUARIO));
            rUsuario.setHeightInPoints(25);

            Row rSucursal = sheet.createRow(2);
            CellRangeAddress craSucursal = new CellRangeAddress(2, 2, 0, 6);
            sheet.addMergedRegion(craSucursal);
            Cell sucursal = rSucursal.createCell(0);
            sucursal.setCellValue("Sucursal: " + solicitud.getSucursal().getNombre());
            sucursal.setCellStyle(estiloHeader(wb, SUCURSAL));
            RegionUtil.setBorderTop(sucursal.getCellStyle().getBorderTop(), craSucursal, sheet, wb);
            RegionUtil.setBorderLeft(sucursal.getCellStyle().getBorderLeft(), craSucursal, sheet, wb);
            RegionUtil.setBorderRight(sucursal.getCellStyle().getBorderRight(), craSucursal, sheet, wb);
            RegionUtil.setBorderBottom(sucursal.getCellStyle().getBorderBottom(), craSucursal, sheet, wb);
            rSucursal.setHeightInPoints(20);

            Row rBlank = sheet.createRow(3);
            Cell blank;
            for (int i = 0; i <= 6; i++) {
                blank = rBlank.createCell(i);
                blank.setCellStyle(estiloVacio(wb));
            }

            Row rFecha = sheet.createRow(4);
            Cell labelFecha = rFecha.createCell(0);
            labelFecha.setCellValue("FECHA:");
            labelFecha.setCellStyle(estiloHeader(wb, LABEL));
            CellRangeAddress craFecha = new CellRangeAddress(4, 4, 1, 3);
            sheet.addMergedRegion(craFecha);
            Cell fecha = rFecha.createCell(1);
            fecha.setCellValue(solicitud.getFechaSolicitud());
            fecha.setCellStyle(estiloHeader(wb, FECHA));
            for (int i = 4; i <= 6; i++) {
                blank = rFecha.createCell(i);
                blank.setCellStyle(estiloVacio(wb));
            }

            Row rVigencia = sheet.createRow(5);
            Cell labelVigencia = rVigencia.createCell(0);
            labelVigencia.setCellValue("VIGENCIA:");
            labelVigencia.setCellStyle(estiloHeader(wb, LABEL));
            CellRangeAddress craVigencia = new CellRangeAddress(5, 5, 1, 3);
            sheet.addMergedRegion(craVigencia);
            Cell vigencia = rVigencia.createCell(1);
            Calendar clndr = Calendar.getInstance();
            clndr.setTime(solicitud.getFechaSolicitud());
            clndr.add(Calendar.DAY_OF_MONTH, 3);
            vigencia.setCellValue(clndr.getTime());
            vigencia.setCellStyle(estiloHeader(wb, FECHA));
            blank = rVigencia.createCell(4);
            blank.setCellStyle(estiloVacio(wb));
            Cell labelNoPedido = rVigencia.createCell(5);
            labelNoPedido.setCellValue("PEDIDO No:");
            labelNoPedido.setCellStyle(estiloCuadro(wb, AMARILLO));
            Cell noPedido = rVigencia.createCell(6);
            noPedido.setCellValue(solicitud.getId());
            noPedido.setCellStyle(estiloCuadro(wb, AMARILLO));

            Row rHoja = sheet.createRow(6);
            for (int i = 0; i <= 4; i++) {
                blank = rHoja.createCell(i);
                blank.setCellStyle(estiloVacio(wb));
            }
            Cell labelHoja = rHoja.createCell(5);
            labelHoja.setCellValue("HOJA:");
            labelHoja.setCellStyle(estiloCuadro(wb, LABEL));
            Cell hoja = rHoja.createCell(6);
            hoja.setCellValue(++cont + "/" + proveedores.size());
            hoja.setCellStyle(estiloCuadro(wb, LABEL));

            Row rProveedor = sheet.createRow(7);
            CellRangeAddress craProveedor = new CellRangeAddress(7, 8, 0, 2);
            sheet.addMergedRegion(craProveedor);
            Cell prov = rProveedor.createCell(0);
            prov.setCellValue(proveedor.getNombre());
            prov.setCellStyle(estiloProveedor(wb));
            for (int i = 3; i <= 6; i++) {
                blank = rProveedor.createCell(i);
                blank.setCellStyle(estiloVacio(wb));
            }

            Row rProveedor2 = sheet.createRow(8);
            for (int i = 3; i <= 6; i++) {
                blank = rProveedor2.createCell(i);
                blank.setCellStyle(estiloVacio(wb));
            }

            Row rTotales = sheet.createRow(9);
            for (int i = 0; i <= 1; i++) {
                blank = rTotales.createCell(i);
                blank.setCellStyle(estiloVacio(wb));
            }
            Cell labelTotales = rTotales.createCell(2);
            labelTotales.setCellValue("TOTALES: ");
            labelTotales.setCellStyle(estiloTotales(wb));
            blank = rTotales.createCell(3);
            blank.setCellStyle(estiloTotales(wb));
            Cell totalSolicitado = rTotales.createCell(4);
            totalSolicitado.setCellStyle(estiloTotales(wb));
            totalSolicitado.setCellType(CellType.FORMULA);
            totalSolicitado.setCellFormula("SUM(E12:E" + (11 + solicitud.getDetalles().size()) + ")");
            Cell totalSurtido = rTotales.createCell(5);
            totalSurtido.setCellStyle(estiloTotales(wb));
            totalSurtido.setCellType(CellType.FORMULA);
            totalSurtido.setCellFormula("SUM(F12:F" + (11 + solicitud.getDetalles().size()) + ")");
            Cell totalNegado = rTotales.createCell(6);
            totalNegado.setCellStyle(estiloTotales(wb));
            totalNegado.setCellType(CellType.FORMULA);
            totalNegado.setCellFormula("SUM(G12:G" + (11 + solicitud.getDetalles().size()) + ")");

            Row rColumnas = sheet.createRow(10);
            Cell labelCodigo = rColumnas.createCell(0);
            labelCodigo.setCellValue("CODIGO");
            labelCodigo.setCellStyle(estiloColumnas(wb, COLUMNA));
            Cell labelOpciones = rColumnas.createCell(1);
            labelOpciones.setCellValue("OPCIONES");
            labelOpciones.setCellStyle(estiloColumnas(wb, COLUMNA));
            Cell labelModelo = rColumnas.createCell(2);
            labelModelo.setCellValue("MODELO / MATERIAL / COLOR");
            labelModelo.setCellStyle(estiloColumnas(wb, COLUMNA));
            Cell labelTalla = rColumnas.createCell(3);
            labelTalla.setCellValue("TALLA");
            labelTalla.setCellStyle(estiloColumnas(wb, COLUMNA));
            Cell labelSolicitado = rColumnas.createCell(4);
            labelSolicitado.setCellValue("SOLICITADO");
            labelSolicitado.setCellStyle(estiloColumnas(wb, COLUMNA));
            Cell labelSurtido = rColumnas.createCell(5);
            labelSurtido.setCellValue("SURTIDO");
            labelSurtido.setCellStyle(estiloColumnas(wb, COLUMNA));
            Cell labelNegado = rColumnas.createCell(6);
            labelNegado.setCellValue("NEGADO");
            labelNegado.setCellStyle(estiloColumnas(wb, COLUMNA));

            Row rValues = sheet.createRow(11);
            Cell codigo;
            Cell opciones;
            Cell modelo;
            Cell talla;
            Cell solicitado;
            Cell surtido;
            Cell negado;
            for (Dsolicitud detalle : solicitud.getDetalles()) {
                if (detalle.getProducto().getProvedor().equals(proveedor)) {
                    codigo = rValues.createCell(0);
                    codigo.setCellValue(detalle.getProducto().getCBarras());
                    codigo.setCellStyle(estiloColumnas(wb, 0));
                    opciones = rValues.createCell(1);
                    opciones.setCellValue(" - ");
                    opciones.setCellStyle(estiloColumnas(wb, 0));
                    modelo = rValues.createCell(2);
                    modelo.setCellValue(detalle.getProducto().getModelo().getNombre() + " / "
                            + detalle.getProducto().getColor().getNombre());
                    modelo.setCellStyle(estiloColumnas(wb, 0));
                    talla = rValues.createCell(3);
                    talla.setCellValue(detalle.getProducto().getTalla().getNombre());
                    talla.setCellStyle(estiloColumnas(wb, 0));
                    solicitado = rValues.createCell(4);
                    solicitado.setCellValue(detalle.getCantidad());
                    solicitado.setCellStyle(estiloColumnas(wb, 0));
                    surtido = rValues.createCell(5);
                    surtido.setCellStyle(estiloColumnas(wb, SURTIDO));
                    negado = rValues.createCell(6);
                    negado.setCellStyle(estiloColumnas(wb, 0));
                }
            }

            for (int i = 0; i <= 6; i++) {
                sheet.autoSizeColumn(i, true);
            }
        }
        // Write the output to a file
        FileOutputStream fileOut = new FileOutputStream("Solicitud" + solicitud.getId() + ".xls");
        wb.write(fileOut);
        fileOut.close();
    }

    public CellStyle estiloVacio(Workbook wb) {
        CellStyle estiloCelda = wb.createCellStyle();
        estiloCelda.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        estiloCelda.setFillPattern(CellStyle.SOLID_FOREGROUND);
        return estiloCelda;
    }

    public CellStyle estiloProveedor(Workbook wb) {
        CellStyle estiloCelda = wb.createCellStyle();
        Font fuente = wb.createFont();
        fuente.setFontName("Calibri");
        fuente.setBold(true);
        fuente.setFontHeightInPoints((short) 32);
        fuente.setColor(IndexedColors.ROYAL_BLUE.getIndex());
        estiloCelda.setFont(fuente);
        estiloCelda.setVerticalAlignment(VerticalAlignment.CENTER);
        estiloCelda.setAlignment(HorizontalAlignment.CENTER);

        return estiloCelda;
    }

    public CellStyle estiloColumnas(Workbook wb, int tipo) {
        CellStyle estiloCelda = wb.createCellStyle();
        Font fuente = wb.createFont();
        if (tipo == COLUMNA) {
            estiloCelda.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
            estiloCelda.setFillPattern(CellStyle.SOLID_FOREGROUND);
            fuente.setBold(true);
        }
        if (tipo == SURTIDO) {
            fuente.setColor(IndexedColors.WHITE.getIndex());
            estiloCelda.setFillForegroundColor(IndexedColors.ROYAL_BLUE.getIndex());
            estiloCelda.setFillPattern(CellStyle.SOLID_FOREGROUND);
        }
        fuente.setFontName("Calibri");
        fuente.setFontHeightInPoints((short) 11);
        estiloCelda.setFont(fuente);
        estiloCelda.setVerticalAlignment(VerticalAlignment.CENTER);
        estiloCelda.setAlignment(HorizontalAlignment.CENTER);
        if (tipo == COLUMNA) {
            estiloCelda.setBorderBottom(BorderStyle.MEDIUM);
            estiloCelda.setBorderTop(BorderStyle.MEDIUM);
            estiloCelda.setBorderLeft(BorderStyle.MEDIUM);
            estiloCelda.setBorderRight(BorderStyle.MEDIUM);
        } else {
            estiloCelda.setBorderBottom(BorderStyle.THIN);
            estiloCelda.setBorderTop(BorderStyle.THIN);
            estiloCelda.setBorderLeft(BorderStyle.THIN);
            estiloCelda.setBorderRight(BorderStyle.THIN);
        }
        return estiloCelda;
    }

    public CellStyle estiloTotales(Workbook wb) {
        CellStyle estiloCelda = wb.createCellStyle();
        Font fuente = wb.createFont();
        estiloCelda.setFillForegroundColor(IndexedColors.ROYAL_BLUE.getIndex());
        estiloCelda.setFillPattern(CellStyle.SOLID_FOREGROUND);
        fuente.setFontName("Calibri");
        fuente.setBold(true);
        fuente.setFontHeightInPoints((short) 14);
        fuente.setColor(IndexedColors.WHITE.getIndex());
        estiloCelda.setFont(fuente);
        estiloCelda.setVerticalAlignment(VerticalAlignment.CENTER);
        estiloCelda.setAlignment(HorizontalAlignment.CENTER);
        estiloCelda.setBorderBottom(BorderStyle.MEDIUM);
        estiloCelda.setBorderTop(BorderStyle.MEDIUM);
        estiloCelda.setBorderLeft(BorderStyle.MEDIUM);
        estiloCelda.setBorderRight(BorderStyle.MEDIUM);

        return estiloCelda;
    }

    public CellStyle estiloCuadro(Workbook wb, int tipo) {
        CellStyle estiloCelda = wb.createCellStyle();
        Font fuente = wb.createFont();
        if (tipo == AMARILLO) {
            estiloCelda.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
            estiloCelda.setFillPattern(CellStyle.SOLID_FOREGROUND);
        }
        fuente.setFontName("Calibri");
        fuente.setBold(true);
        fuente.setFontHeightInPoints((short) 12);
        estiloCelda.setFont(fuente);
        estiloCelda.setVerticalAlignment(VerticalAlignment.CENTER);
        estiloCelda.setAlignment(HorizontalAlignment.CENTER);
        estiloCelda.setBorderBottom(BorderStyle.THIN);
        estiloCelda.setBorderTop(BorderStyle.THIN);
        estiloCelda.setBorderLeft(BorderStyle.THIN);
        estiloCelda.setBorderRight(BorderStyle.THIN);

        return estiloCelda;
    }

    public CellStyle estiloHeader(Workbook wb, int tipo) {
        Font fuente = wb.createFont();
        CreationHelper createHelper = wb.getCreationHelper();
        fuente.setFontName("Calibri");
        fuente.setBold(true);

        if (tipo == TITULO || tipo == SUCURSAL || tipo == LABEL || tipo == FECHA) {
            fuente.setFontHeightInPoints((short) 16);
        } else if (tipo == USUARIO) {
            fuente.setFontHeightInPoints((short) 20);
        }

        CellStyle estiloCelda = wb.createCellStyle();
        estiloCelda.setFont(fuente);

        if (tipo == TITULO || tipo == USUARIO || tipo == LABEL || tipo == FECHA) {
            estiloCelda.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        } else if (tipo == SUCURSAL) {
            estiloCelda.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        }
        estiloCelda.setFillPattern(CellStyle.SOLID_FOREGROUND);

        if (tipo == LABEL || tipo == FECHA) {
            estiloCelda.setWrapText(false);
        } else if (tipo == TITULO || tipo == SUCURSAL || tipo == USUARIO) {
            estiloCelda.setWrapText(true);
        }

        estiloCelda.setAlignment(HorizontalAlignment.CENTER);

        if (tipo == LABEL || tipo == FECHA) {
            estiloCelda.setVerticalAlignment(VerticalAlignment.BOTTOM);
        } else if (tipo == TITULO || tipo == SUCURSAL || tipo == USUARIO) {
            estiloCelda.setVerticalAlignment(VerticalAlignment.CENTER);
        }

        if (tipo == SUCURSAL) {
            estiloCelda.setBorderBottom(BorderStyle.MEDIUM);
            estiloCelda.setBorderTop(BorderStyle.MEDIUM);
            estiloCelda.setBorderLeft(BorderStyle.MEDIUM);
            estiloCelda.setBorderRight(BorderStyle.MEDIUM);
        }

        if (tipo == FECHA) {
            estiloCelda.setDataFormat(createHelper.createDataFormat().getFormat("dd \"de\" mmmm \"de\" yyyy"));
        }

        return estiloCelda;
    }

}