package com.util;

import java.io.File;
import java.io.FileOutputStream;  
import java.io.IOException;
import java.text.SimpleDateFormat;  
import java.util.ArrayList;  
import java.util.List;  

import javax.servlet.http.HttpServletRequest;

import org.apache.poi.hssf.usermodel.HSSFCell;  
import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;  
import org.apache.poi.hssf.usermodel.HSSFSheet;  
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  

/**
 * @author 作者姓名: dubaohui
 * @version 创建时间：2015-8-12 下午2:57:13
 * 类说明：生成Excel工具类
 */
public class BuilderExcel  
{  
    /** 
     * @功能：手工构建一个简单格式的Excel 
     */  
    private static List<Student> getStudent() throws Exception  
    {  
        List list = new ArrayList();  
        SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");  
        Student user1 = new Student(1, "张三", 16, df.parse("1997-03-12"));  
        Student user2 = new Student(2, "李四", 17, df.parse("1996-08-12"));  
        Student user3 = new Student(3, "王五", 26, df.parse("1985-11-12"));  
        list.add(user1);  
        list.add(user2);  
        list.add(user3);
        return list;  
    }  
    //生成Excel
    public static boolean  Builderexcels(HttpServletRequest request,String sheetname,String[] heard,List list,String xlsname){
    	boolean sign = false;
    	// 第一步，创建一个webbook，对应一个Excel文件  
        HSSFWorkbook wb = new HSSFWorkbook();  
        // 第二步，在webbook中添加一个sheet,对应Excel文件中的sheet  
        HSSFSheet sheet = wb.createSheet(sheetname);  
        // 第三步，在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short  
        HSSFRow row = sheet.createRow(0);
        // 第四步，创建单元格，并设置值表头 设置表头居中  
        HSSFCellStyle style =Tablestyle(wb, 14, true, true, true, 13, false);
        // 创建一个居中格式  
        HSSFCell cell = null;
        int valuelength=0;
        if(heard.length>0){
        	valuelength = heard.length;
        	for(int i=0;i<heard.length;i++){
        		cell = row.createCell(i);  
                cell.setCellValue(heard[i]);  
                cell.setCellStyle(style);
        	}
        }
        // 第五步，写入实体数据 实际应用中这些数据从数据库得到，  
        HSSFCellStyle style1 =Tablestyle(wb, 12, false, true, true, 1, false);
        if(list !=null && list.size()>0){
	        for (int i = 0; i < list.size(); i++)  
	         {  
	        	int j=i+1;
	            row = sheet.createRow(j);  
	            Object[] obj =(Object[])list.get(i);
	            // 第四步，创建单元格，并设置值  
	            	for(int t = 0;t<valuelength;t++){
	            		cell = row.createCell(t);
	                    cell.setCellStyle(style1);
	                    cell.setCellValue(RequestUtil.ReturnObjStr(obj[t]));
	            	}          
	        } 
        }
        sign = true;
        // 第六步，将文件存到指定位置
        FileOutputStream fout=null;
        String paths = "";
        try{  
        	paths = request.getSession().getServletContext().getRealPath("attached")+File.separator+xlsname+".xls";
            fout = new FileOutputStream(paths);  
            wb.write(fout);
            sign = true;
        }catch (Exception e){  
        	sign = false;
            e.printStackTrace();  
        }finally{
        	try {
				fout.close();
				wb.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				sign = false;
				e.printStackTrace();
			} 
            
        }  
    	return sign;
    }
    
    public static void main(String[] args) throws Exception  
    {  
//        // 第一步，创建一个webbook，对应一个Excel文件  
//        HSSFWorkbook wb = new HSSFWorkbook();  
//        // 第二步，在webbook中添加一个sheet,对应Excel文件中的sheet  
//        HSSFSheet sheet = wb.createSheet("学生表一");  
//        // 第三步，在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short  
//        HSSFRow row = sheet.createRow((int) 0);
//        // 第四步，创建单元格，并设置值表头 设置表头居中  
//        HSSFCellStyle style =Tablestyle(wb, 14, true, true, true, 13, false);
//        // 创建一个居中格式  
//        HSSFCell cell = row.createCell(0);  
//        cell.setCellValue("学号");  
//        cell.setCellStyle(style);
//        cell = row.createCell(1);  
//        cell.setCellValue("姓名");  
//        cell.setCellStyle(style);  
//        cell = row.createCell(2);  
//        cell.setCellValue("年龄");  
//        cell.setCellStyle(style);  
//        cell = row.createCell(3);  
//        cell.setCellValue("生日");  
//        cell.setCellStyle(style);  
//        // 第五步，写入实体数据 实际应用中这些数据从数据库得到，  
//        List list = BuilderExcel.getStudent(); 
//        HSSFCellStyle style1 =Tablestyle(wb, 12, false, true, true, 1, false);
//        for (int i = 0; i < list.size(); i++)  
//        {  
//            row = sheet.createRow((int) i + 1);  
//            Student stu = (Student) list.get(i);  
//            // 第四步，创建单元格，并设置值  
//            cell = row.createCell(0);
//            cell.setCellStyle(style1);
//            cell.setCellValue("111");
//            cell = row.createCell(1);
//            cell.setCellStyle(style1);
//            cell.setCellValue("2222");
//            cell = row.createCell(2);
//            cell.setCellStyle(style1);
//            cell.setCellValue("3333");
//            cell = row.createCell(3); 
//            cell.setCellStyle(style1);
//            cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(stu.getBirth()));  
//        }  
//        // 第六步，将文件存到指定位置  
//        try  
//        {  
//            FileOutputStream fout = new FileOutputStream("/Users/dubaohui/Desktop/students.xls");  
//            wb.write(fout);  
//            fout.close();  
//        }  
//        catch (Exception e)  
//        {  
//            e.printStackTrace();  
//        }  
    }  
    
    
    /**
     * 
     * 表样式
     * @param fontsize 字体大小
     * @param isfontbold 是否粗体
     * @param isborder 是否存在边框
     * @param isgroundcolor 是否设置背景颜色
     * @param iswaptext 是否自动换行
     * @return HSSFCellStyle
     * */
    private static HSSFCellStyle Tablestyle(HSSFWorkbook wb,int fontsize,boolean isfontbold,boolean isborder,boolean isgroundcolor,int groundcolor,boolean iswaptext){
    	HSSFCellStyle style = wb.createCellStyle();  
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); 
        if(isborder){
	        style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框    
	        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框    
	        style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框    
	        style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 
        }
        if(isgroundcolor){
	        style.setFillForegroundColor((short) groundcolor);// 设置背景色    
	        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
        }
        style.setWrapText(iswaptext);
        HSSFFont font = wb.createFont();    
        font.setFontName("黑体");    
        font.setFontHeightInPoints((short) fontsize);//设置字体大小 
        if(isfontbold){
          font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示 
        }
        style.setFont(font);
        return style;
    }
    
} 