package cn.report.test.ok;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;

import cn.report.excel.easyexcel.api.write.metadata.style.WriteCellStyle;
import cn.report.excel.easyexcel.api.write.metadata.style.WriteFont;
import cn.report.excel.easyexcel.api.write.style.HorizontalCellStyleStrategy;
import lombok.Data;


public class EasyExcelTest {

	 
		
	public static void main(String[] args) throws FileNotFoundException 
	{
		String fileName = "D:\\data\\excel\\xbm.xlsx";
	
		
	}
	//EasyExcel的不确定表头（根据数据生成表头）的excel导出和二级表头以及设置表头的宽度自适应
	
	
	    private static HorizontalCellStyleStrategy myHorizontalCellStyleStrategy(){
	//1 表头样式策略
	        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
	        //设置表头居中对齐
	        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
	        //表头前景设置淡蓝色
	        headWriteCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
	        WriteFont headWriteFont = new WriteFont();
	        headWriteFont.setBold(true);
	        headWriteFont.setFontName("宋体");
	        headWriteFont.setFontHeightInPoints((short)12);
	        headWriteCellStyle.setWriteFont(headWriteFont);

	        //内容样式  多个样式则隔行换色
	        List<WriteCellStyle>   listCntWritCellSty =  new ArrayList<>();

	//2 内容样式策略  样式一
	        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
	        WriteFont contentWriteFont = new WriteFont();
	        //内容字体大小
	        contentWriteFont.setFontName("宋体");
	        contentWriteFont.setFontHeightInPoints((short)11);
	        contentWriteCellStyle.setWriteFont(contentWriteFont);
	        //设置自动换行
	        contentWriteCellStyle.setWrapped(true);
	        //设置垂直居中
	        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
	        // 头默认了 FillPatternType所以可以不指定。
	        contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
	        //设置背景黄色
	        contentWriteCellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
	        //设置水平靠左
	        //contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
	        //设置边框样式
	        setBorderStyle(contentWriteCellStyle);
	        //内容风格可以定义多个。
	        listCntWritCellSty.add(contentWriteCellStyle);

	//2 内容样式策略  样式二
	        WriteCellStyle contentWriteCellStyle2 = new WriteCellStyle();
	        // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色。
	        // 头默认了 FillPatternType所以可以不指定。
	        contentWriteCellStyle2.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
	        // 背景绿色
	        contentWriteCellStyle2.setFillForegroundColor(IndexedColors.GREEN.getIndex());
	        //设置垂直居中
	        contentWriteCellStyle2.setVerticalAlignment(VerticalAlignment.CENTER);
	        //设置边框样式
	        setBorderStyle(contentWriteCellStyle2);
	        listCntWritCellSty.add(contentWriteCellStyle2);
	        // 水平单元格风格综合策略(表头 + 内容)
	        // return  new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
	        return  new HorizontalCellStyleStrategy(headWriteCellStyle, listCntWritCellSty);
	    }

	    
	    /**
	     * 设置边框样式
	     * @param contentWriteCellStyle
	     */
	    private static void setBorderStyle(WriteCellStyle contentWriteCellStyle){
	        //设置边框样式
	        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
	        // contentWriteCellStyle.setBottomBorderColor(IndexedColors.BLUE.getIndex()); //颜色
	        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
	        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
	        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
	    }
}
