com.abacus.reports.ExcelBuilder.java Source code

Java tutorial

Introduction

Here is the source code for com.abacus.reports.ExcelBuilder.java

Source

/*
 * 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.
 */
package com.abacus.reports;

import java.awt.Color;
import java.awt.Font;
import java.awt.print.Book;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPalette;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.springframework.web.servlet.view.document.AbstractExcelView;

/**
 *
 * @author Kent
 */
public class ExcelBuilder extends AbstractExcelView {
    @Override
    protected void buildExcelDocument(Map<String, Object> map, HSSFWorkbook workbook, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // get data model which is passed by the Spring container
        List headerlist = (List) map.get("header");
        List<Object[]> data = (List) map.get("data");
        String reportname = String.valueOf(map.get("report_name"));

        // create a new Excel sheet
        HSSFSheet sheet = workbook.createSheet(reportname);
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-disposition", "attachment; filename=" + reportname + ".xls");
        OutputStream outStream = response.getOutputStream();
        sheet.setDefaultColumnWidth(30);

        // create style for header cells
        CellStyle style = workbook.createCellStyle();
        HSSFFont font = workbook.createFont();
        HSSFPalette palette = workbook.getCustomPalette();
        HSSFColor color = palette.findSimilarColor(152, 35, 17);
        short paindex = color.getIndex();
        font.setFontName("Trebuchet MS");
        style.setFillForegroundColor(paindex);
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        font.setColor(HSSFColor.WHITE.index);
        style.setFont(font);

        // create header row
        HSSFRow header = sheet.createRow(0);
        int row = 0;
        for (Object headerlist1 : headerlist) {

            header.createCell(row).setCellValue(String.valueOf(headerlist1));
            header.getCell(row).setCellStyle(style);
            row++;
        }

        CellStyle style2 = workbook.createCellStyle();
        HSSFFont font2 = workbook.createFont();
        font2.setFontName("Trebuchet MS");
        style2.setFont(font2);

        System.out.println("data.size(): " + data.size());
        int rownum = 1;
        // create data rows         
        for (int rowCount = 0; rowCount < data.size(); rowCount++) {
            HSSFRow aRow = sheet.createRow(rownum);
            Object[] value = data.get(rowCount);
            int col = 0;
            for (Object value1 : value) {
                HSSFCell cell = aRow.createCell(col++);
                cell.setCellStyle(style2);
                if (value1 instanceof java.lang.String)
                    cell.setCellValue(String.valueOf(value1));
                if (value1 instanceof java.lang.Integer)
                    cell.setCellValue(Integer.parseInt(String.valueOf(value1)));
                if (value1 instanceof java.lang.Boolean)
                    cell.setCellValue(Integer.parseInt(String.valueOf(value1)));
                if (value1 instanceof java.lang.Double)
                    cell.setCellValue(Double.parseDouble(String.valueOf(value1)));
                if (value1 instanceof java.lang.Float)
                    cell.setCellValue(Float.parseFloat(String.valueOf(value1)));
            }
            rownum++;
        }
        workbook.write(outStream);
        outStream.close();
    }

}