package cn.rivamed.util;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFCellUtil;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;

/**
 * Created by dawenzi on 2017/12/19.
 */
public class PoiExcelStyleUtil {

    public static final int EXCEL_TITLE=0;//表格头
    public static final int EXCEL_MESSAGE=1;//表格信息
    public static final int EXCEL_COLUMN=2;//表格列名
    public static final int CONTENT_CENTER_CENTER=3;//正文左右上下对齐
    public static final int CONTENT_LEFT_CENTER=31;//正文左右上下对齐
    public static final int CONTENT_RIGHT_CENTER=32;//正文左右上下对齐
    public static final int TAIL_LEFT_TOP=4;//结尾左右上下对齐
    public static final int TAIL_LEFT_CENTER=41;//结尾左右上下对齐

    /**
     * 获取单元格样式
     * @param hssfWorkbook
     * @param style
     * @return
     */
    public static HSSFCellStyle getCellStyle(HSSFWorkbook hssfWorkbook, int style){

        //字体格式
        HSSFFont font = hssfWorkbook.createFont();
        font.setFontName("宋体");
        //单元格样式一
        HSSFCellStyle cellStyle  = hssfWorkbook.createCellStyle();

        switch (style){
            //表头
            case 0:{
                cellStyle.setAlignment(CellStyle.ALIGN_CENTER);//水平居中
                cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直居中
                font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
                font.setFontHeightInPoints((short) 22);
                break;
            }
            //表格信息
            case 1:{
                cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//顶端对齐
                cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);//左对齐
                font.setFontHeightInPoints((short) 9);
                break;
            }
            //列名
            case 2:{
                cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
                cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
                cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
                cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
                cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直居中
                cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
                cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
                cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
                font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
                font.setFontHeightInPoints((short) 9);
                break;
            }
            //正文
            case 3:{
                cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
                cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
                cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
                cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
                cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中
                cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直居中
                cellStyle.setWrapText(true); //自动换行
                font.setFontHeightInPoints((short) 9);
                break;
            }
            case 31:{
                cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
                cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
                cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
                cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
                cellStyle.setAlignment(CellStyle.ALIGN_LEFT);//左边对齐
                cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直居中
                cellStyle.setWrapText(true); //自动换行
                font.setFontHeightInPoints((short) 9);
                break;
            }
            case 32:{
                cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
                cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
                cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
                cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
                cellStyle.setAlignment(CellStyle.ALIGN_RIGHT);//左边对齐
                cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直居中
                cellStyle.setWrapText(true); //自动换行
                font.setFontHeightInPoints((short) 9);
                break;
            }
            //结尾
            case 4:{
                cellStyle.setVerticalAlignment(CellStyle.VERTICAL_TOP);//顶端对齐
                cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);//左对齐
                font.setFontHeightInPoints((short) 9);
                break;
            }
            case 41:{
                cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//顶端对齐
                cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);//左对齐
                font.setFontHeightInPoints((short) 9);
                break;
            }
            default:{}
        }
        cellStyle.setFont(font);

        return cellStyle;
    }

    //合并单元格
    public static void mergeCell(Sheet sheet,int firstRow, int lastRow, int firstCol, int lastCol){
        CellRangeAddress cra =new CellRangeAddress(firstRow, lastRow, firstCol, lastCol); // 起始行, 终止行, 起始列, 终止列
        sheet.addMergedRegion(cra);
    }


    //样式问题
    public static void setRegionStyle(HSSFSheet sheet, Region region, HSSFCellStyle cs) {
        for (int i = region.getRowFrom(); i <= region.getRowTo(); i++) {
            HSSFRow row = HSSFCellUtil.getRow(i, sheet);
            for (int j = region.getColumnFrom(); j <= region.getColumnTo(); j++) {
                HSSFCell cell = HSSFCellUtil.getCell(row, (short) j);
                cell.setCellStyle(cs);
            }
        }
    }
}
