Excel注解支持导入导出标题信息
This commit is contained in:
		
							parent
							
								
									7479ff4b06
								
							
						
					
					
						commit
						30c89b33fe
					
				@ -47,6 +47,7 @@ import org.apache.poi.ss.usermodel.Sheet;
 | 
				
			|||||||
import org.apache.poi.ss.usermodel.VerticalAlignment;
 | 
					import org.apache.poi.ss.usermodel.VerticalAlignment;
 | 
				
			||||||
import org.apache.poi.ss.usermodel.Workbook;
 | 
					import org.apache.poi.ss.usermodel.Workbook;
 | 
				
			||||||
import org.apache.poi.ss.usermodel.WorkbookFactory;
 | 
					import org.apache.poi.ss.usermodel.WorkbookFactory;
 | 
				
			||||||
 | 
					import org.apache.poi.ss.util.CellRangeAddress;
 | 
				
			||||||
import org.apache.poi.ss.util.CellRangeAddressList;
 | 
					import org.apache.poi.ss.util.CellRangeAddressList;
 | 
				
			||||||
import org.apache.poi.util.IOUtils;
 | 
					import org.apache.poi.util.IOUtils;
 | 
				
			||||||
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 | 
					import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 | 
				
			||||||
@ -125,6 +126,16 @@ public class ExcelUtil<T>
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    private List<Object[]> fields;
 | 
					    private List<Object[]> fields;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 当前行号
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private int rownum;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 标题
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private String title;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 最大高度
 | 
					     * 最大高度
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
@ -150,7 +161,7 @@ public class ExcelUtil<T>
 | 
				
			|||||||
        this.clazz = clazz;
 | 
					        this.clazz = clazz;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void init(List<T> list, String sheetName, Type type)
 | 
					    public void init(List<T> list, String sheetName, String title, Type type)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (list == null)
 | 
					        if (list == null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -159,8 +170,27 @@ public class ExcelUtil<T>
 | 
				
			|||||||
        this.list = list;
 | 
					        this.list = list;
 | 
				
			||||||
        this.sheetName = sheetName;
 | 
					        this.sheetName = sheetName;
 | 
				
			||||||
        this.type = type;
 | 
					        this.type = type;
 | 
				
			||||||
 | 
					        this.title = title;
 | 
				
			||||||
        createExcelField();
 | 
					        createExcelField();
 | 
				
			||||||
        createWorkbook();
 | 
					        createWorkbook();
 | 
				
			||||||
 | 
					        createTitle();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 创建excel第一行标题
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void createTitle()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (StringUtils.isNotEmpty(title))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0);
 | 
				
			||||||
 | 
					            titleRow.setHeightInPoints(30);
 | 
				
			||||||
 | 
					            Cell titleCell = titleRow.createCell(0);
 | 
				
			||||||
 | 
					            titleCell.setCellStyle(styles.get("title"));
 | 
				
			||||||
 | 
					            titleCell.setCellValue(title);
 | 
				
			||||||
 | 
					            sheet.addMergedRegion(new CellRangeAddress(titleRow.getRowNum(), titleRow.getRowNum(), titleRow.getRowNum(),
 | 
				
			||||||
 | 
					                    this.fields.size() - 1));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -171,17 +201,30 @@ public class ExcelUtil<T>
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public List<T> importExcel(InputStream is) throws Exception
 | 
					    public List<T> importExcel(InputStream is) throws Exception
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return importExcel(StringUtils.EMPTY, is);
 | 
					        return importExcel(is, 0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 对excel表单默认第一个索引名转换成list
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @param is 输入流
 | 
				
			||||||
 | 
					     * @param titleNum 标题占用行数
 | 
				
			||||||
 | 
					     * @return 转换后集合
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public List<T> importExcel(InputStream is, int titleNum) throws Exception
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return importExcel(StringUtils.EMPTY, is, titleNum);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 对excel表单指定表格索引名转换成list
 | 
					     * 对excel表单指定表格索引名转换成list
 | 
				
			||||||
     * 
 | 
					     * 
 | 
				
			||||||
     * @param sheetName 表格索引名
 | 
					     * @param sheetName 表格索引名
 | 
				
			||||||
 | 
					     * @param titleNum 标题占用行数
 | 
				
			||||||
     * @param is 输入流
 | 
					     * @param is 输入流
 | 
				
			||||||
     * @return 转换后集合
 | 
					     * @return 转换后集合
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public List<T> importExcel(String sheetName, InputStream is) throws Exception
 | 
					    public List<T> importExcel(String sheetName, InputStream is, int titleNum) throws Exception
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.type = Type.IMPORT;
 | 
					        this.type = Type.IMPORT;
 | 
				
			||||||
        this.wb = WorkbookFactory.create(is);
 | 
					        this.wb = WorkbookFactory.create(is);
 | 
				
			||||||
@ -210,7 +253,7 @@ public class ExcelUtil<T>
 | 
				
			|||||||
            // 定义一个map用于存放excel列的序号和field.
 | 
					            // 定义一个map用于存放excel列的序号和field.
 | 
				
			||||||
            Map<String, Integer> cellMap = new HashMap<String, Integer>();
 | 
					            Map<String, Integer> cellMap = new HashMap<String, Integer>();
 | 
				
			||||||
            // 获取表头
 | 
					            // 获取表头
 | 
				
			||||||
            Row heard = sheet.getRow(0);
 | 
					            Row heard = sheet.getRow(titleNum);
 | 
				
			||||||
            for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++)
 | 
					            for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Cell cell = heard.getCell(i);
 | 
					                Cell cell = heard.getCell(i);
 | 
				
			||||||
@ -243,7 +286,7 @@ public class ExcelUtil<T>
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            for (int i = 1; i <= rows; i++)
 | 
					            for (int i = titleNum + 1; i <= rows; i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                // 从第2行开始取数据,默认第一行是表头.
 | 
					                // 从第2行开始取数据,默认第一行是表头.
 | 
				
			||||||
                Row row = sheet.getRow(i);
 | 
					                Row row = sheet.getRow(i);
 | 
				
			||||||
@ -369,7 +412,20 @@ public class ExcelUtil<T>
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public AjaxResult exportExcel(List<T> list, String sheetName)
 | 
					    public AjaxResult exportExcel(List<T> list, String sheetName)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.init(list, sheetName, Type.EXPORT);
 | 
					        return exportExcel(list, sheetName, StringUtils.EMPTY);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 对list数据源将其里面的数据导入到excel表单
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @param list 导出数据集合
 | 
				
			||||||
 | 
					     * @param sheetName 工作表的名称
 | 
				
			||||||
 | 
					     * @param title 标题
 | 
				
			||||||
 | 
					     * @return 结果
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public AjaxResult exportExcel(List<T> list, String sheetName, String title)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        this.init(list, sheetName, title, Type.EXPORT);
 | 
				
			||||||
        return exportExcel();
 | 
					        return exportExcel();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -382,11 +438,26 @@ public class ExcelUtil<T>
 | 
				
			|||||||
     * @return 结果
 | 
					     * @return 结果
 | 
				
			||||||
     * @throws IOException
 | 
					     * @throws IOException
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void exportExcel(HttpServletResponse response, List<T> list, String sheetName) throws IOException
 | 
					    public void exportExcel(HttpServletResponse response, List<T> list, String sheetName)throws IOException
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        exportExcel(response, list, sheetName, StringUtils.EMPTY);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 对list数据源将其里面的数据导入到excel表单
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @param response 返回数据
 | 
				
			||||||
 | 
					     * @param list 导出数据集合
 | 
				
			||||||
 | 
					     * @param sheetName 工作表的名称
 | 
				
			||||||
 | 
					     * @param title 标题
 | 
				
			||||||
 | 
					     * @return 结果
 | 
				
			||||||
 | 
					     * @throws IOException
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void exportExcel(HttpServletResponse response, List<T> list, String sheetName, String title) throws IOException
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
 | 
					        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
 | 
				
			||||||
        response.setCharacterEncoding("utf-8");
 | 
					        response.setCharacterEncoding("utf-8");
 | 
				
			||||||
        this.init(list, sheetName, Type.EXPORT);
 | 
					        this.init(list, sheetName, title, Type.EXPORT);
 | 
				
			||||||
        exportExcel(response.getOutputStream());
 | 
					        exportExcel(response.getOutputStream());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -398,7 +469,19 @@ public class ExcelUtil<T>
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public AjaxResult importTemplateExcel(String sheetName)
 | 
					    public AjaxResult importTemplateExcel(String sheetName)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.init(null, sheetName, Type.IMPORT);
 | 
					        return importTemplateExcel(sheetName, StringUtils.EMPTY);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 对list数据源将其里面的数据导入到excel表单
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @param sheetName 工作表的名称
 | 
				
			||||||
 | 
					     * @param title 标题
 | 
				
			||||||
 | 
					     * @return 结果
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public AjaxResult importTemplateExcel(String sheetName, String title)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        this.init(null, sheetName, title, Type.IMPORT);
 | 
				
			||||||
        return exportExcel();
 | 
					        return exportExcel();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -409,10 +492,22 @@ public class ExcelUtil<T>
 | 
				
			|||||||
     * @return 结果
 | 
					     * @return 结果
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void importTemplateExcel(HttpServletResponse response, String sheetName) throws IOException
 | 
					    public void importTemplateExcel(HttpServletResponse response, String sheetName) throws IOException
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        importTemplateExcel(response, sheetName);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 对list数据源将其里面的数据导入到excel表单
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @param sheetName 工作表的名称
 | 
				
			||||||
 | 
					     * @param title 标题
 | 
				
			||||||
 | 
					     * @return 结果
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void importTemplateExcel(HttpServletResponse response, String sheetName, String title) throws IOException
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
 | 
					        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
 | 
				
			||||||
        response.setCharacterEncoding("utf-8");
 | 
					        response.setCharacterEncoding("utf-8");
 | 
				
			||||||
        this.init(null, sheetName, Type.IMPORT);
 | 
					        this.init(null, sheetName, title, Type.IMPORT);
 | 
				
			||||||
        exportExcel(response.getOutputStream());
 | 
					        exportExcel(response.getOutputStream());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -473,13 +568,13 @@ public class ExcelUtil<T>
 | 
				
			|||||||
    public void writeSheet()
 | 
					    public void writeSheet()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // 取出一共有多少个sheet.
 | 
					        // 取出一共有多少个sheet.
 | 
				
			||||||
        double sheetNo = Math.ceil(list.size() / sheetSize);
 | 
					        int sheetNo = Math.max(1, (int) Math.ceil(list.size() * 1.0 / sheetSize));
 | 
				
			||||||
        for (int index = 0; index <= sheetNo; index++)
 | 
					        for (int index = 0; index < sheetNo; index++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            createSheet(sheetNo, index);
 | 
					            createSheet(sheetNo, index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // 产生一行
 | 
					            // 产生一行
 | 
				
			||||||
            Row row = sheet.createRow(0);
 | 
					            Row row = sheet.createRow(rownum);
 | 
				
			||||||
            int column = 0;
 | 
					            int column = 0;
 | 
				
			||||||
            // 写入各个字段的列头名称
 | 
					            // 写入各个字段的列头名称
 | 
				
			||||||
            for (Object[] os : fields)
 | 
					            for (Object[] os : fields)
 | 
				
			||||||
@ -507,7 +602,7 @@ public class ExcelUtil<T>
 | 
				
			|||||||
        int endNo = Math.min(startNo + sheetSize, list.size());
 | 
					        int endNo = Math.min(startNo + sheetSize, list.size());
 | 
				
			||||||
        for (int i = startNo; i < endNo; i++)
 | 
					        for (int i = startNo; i < endNo; i++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            row = sheet.createRow(i + 1 - startNo);
 | 
					            row = sheet.createRow(i + 1 + rownum - startNo);
 | 
				
			||||||
            // 得到导出对象.
 | 
					            // 得到导出对象.
 | 
				
			||||||
            T vo = (T) list.get(i);
 | 
					            T vo = (T) list.get(i);
 | 
				
			||||||
            int column = 0;
 | 
					            int column = 0;
 | 
				
			||||||
@ -535,6 +630,16 @@ public class ExcelUtil<T>
 | 
				
			|||||||
        CellStyle style = wb.createCellStyle();
 | 
					        CellStyle style = wb.createCellStyle();
 | 
				
			||||||
        style.setAlignment(HorizontalAlignment.CENTER);
 | 
					        style.setAlignment(HorizontalAlignment.CENTER);
 | 
				
			||||||
        style.setVerticalAlignment(VerticalAlignment.CENTER);
 | 
					        style.setVerticalAlignment(VerticalAlignment.CENTER);
 | 
				
			||||||
 | 
					        Font titleFont = wb.createFont();
 | 
				
			||||||
 | 
					        titleFont.setFontName("Arial");
 | 
				
			||||||
 | 
					        titleFont.setFontHeightInPoints((short) 16);
 | 
				
			||||||
 | 
					        titleFont.setBold(true);
 | 
				
			||||||
 | 
					        style.setFont(titleFont);
 | 
				
			||||||
 | 
					        styles.put("title", style);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        style = wb.createCellStyle();
 | 
				
			||||||
 | 
					        style.setAlignment(HorizontalAlignment.CENTER);
 | 
				
			||||||
 | 
					        style.setVerticalAlignment(VerticalAlignment.CENTER);
 | 
				
			||||||
        style.setBorderRight(BorderStyle.THIN);
 | 
					        style.setBorderRight(BorderStyle.THIN);
 | 
				
			||||||
        style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
 | 
					        style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
 | 
				
			||||||
        style.setBorderLeft(BorderStyle.THIN);
 | 
					        style.setBorderLeft(BorderStyle.THIN);
 | 
				
			||||||
@ -1117,6 +1222,9 @@ public class ExcelUtil<T>
 | 
				
			|||||||
    public void createWorkbook()
 | 
					    public void createWorkbook()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.wb = new SXSSFWorkbook(500);
 | 
					        this.wb = new SXSSFWorkbook(500);
 | 
				
			||||||
 | 
					        this.sheet = wb.createSheet();
 | 
				
			||||||
 | 
					        wb.setSheetName(0, sheetName);
 | 
				
			||||||
 | 
					        this.styles = createStyles(wb);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -1125,17 +1233,13 @@ public class ExcelUtil<T>
 | 
				
			|||||||
     * @param sheetNo sheet数量
 | 
					     * @param sheetNo sheet数量
 | 
				
			||||||
     * @param index 序号
 | 
					     * @param index 序号
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public void createSheet(double sheetNo, int index)
 | 
					    public void createSheet(int sheetNo, int index)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.sheet = wb.createSheet();
 | 
					 | 
				
			||||||
        this.styles = createStyles(wb);
 | 
					 | 
				
			||||||
        // 设置工作表的名称.
 | 
					        // 设置工作表的名称.
 | 
				
			||||||
        if (sheetNo == 0)
 | 
					        if (sheetNo > 1 && index > 0)
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            wb.setSheetName(index, sheetName);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            this.sheet = wb.createSheet();
 | 
				
			||||||
 | 
					            this.createTitle();
 | 
				
			||||||
            wb.setSheetName(index, sheetName + index);
 | 
					            wb.setSheetName(index, sheetName + index);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user