jeecg输入中文查询导表为空_Jeecg v3.3版本自带导出ExcelExportUtil分sheet页及解决POI表格重绘问题...

package org.jeecgframework.core.util.excel;

import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.IOException;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.lang.reflect.ParameterizedType;

import java.util.ArrayList;

import java.util.Collection;

import java.util.Collections;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import javax.imageio.ImageIO;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;

import org.apache.poi.hssf.usermodel.HSSFRichTextString;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.hssf.util.HSSFColor;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.Drawing;

import org.apache.poi.ss.usermodel.Font;

import org.apache.poi.ss.usermodel.RichTextString;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.util.CellRangeAddress;

import org.jeecgframework.core.annotation.excel.Excel;

import org.jeecgframework.core.annotation.excel.ExcelCollection;

import org.jeecgframework.core.annotation.excel.ExcelEntity;

import org.jeecgframework.core.annotation.excel.ExcelTarget;

import org.jeecgframework.core.util.excel.entity.ComparatorExcelField;

import org.jeecgframework.core.util.excel.entity.ExcelExportEntity;

import org.jeecgframework.core.util.excel.entity.ExcelTitle;

/**

* excel 导出工具类

*

* @author guanxf

* 解决问题:

* 1、导出Excel分sheet页的问题

* 2、绘制表格失败的问题

*/

public class ExcelExportUtil {

private static int SHEET_MAX_NUM=1000;

/**

* 一个excel 创建多个sheet

*

* @param list

*            多个Map key title 对应表格Title key entity 对应表格对应实体 key data

*            Collection 数据

* @return

*/

public static HSSFWorkbook exportExcel(List> list) {

HSSFWorkbook workbook = new HSSFWorkbook();

for (Map map : list) {

createSheetInUserModel2File(workbook,

(ExcelTitle) map.get("title"),

(Class>) map.get("entity"),

(Collection>) map.get("data"));

}

return workbook;

}

/**

*

* @param entity

*            表格标题属性

* @param pojoClass

*            Excel对象Class

* @param dataSet

*            Excel对象数据List

* @param out

*            输出流

*/

public static HSSFWorkbook exportExcel(ExcelTitle entity,

Class> pojoClass, Collection> dataSet) {

HSSFWorkbook workbook = new HSSFWorkbook();

//createSheetInUserModel2File(workbook, entity, pojoClass, dataSet);

//创建Sheet

createSheetInExcel(workbook, entity, pojoClass, dataSet);

return workbook;

}

/**

* 创建sheet页

* @param workbook

* @param entity

* @param pojoClass

* @param dataSet

*/

private static void createSheetInExcel(HSSFWorkbook workbook,

ExcelTitle entity, Class> pojoClass, Collection> dataSet) {

Sheet sheet =null;

List dataSetDataBySheet=new ArrayList();

HSSFCellStyle style = workbook.createCellStyle();

HSSFCellStyle titleStyle = workbook.createCellStyle();

int index=0;

int sheetNo=0;//sheet页的编号

Iterator> its = dataSet.iterator();

while (its.hasNext()) {

Object t = its.next();

dataSetDataBySheet.add(t);

if(index%SHEET_MAX_NUM==0 && index>0){

++sheetNo;

sheet= workbook.createSheet(entity.getSheetName()+"_"+sheetNo);

createUserModel2File(workbook, sheet,style, titleStyle, entity, pojoClass, dataSetDataBySheet);

dataSetDataBySheet=new ArrayList();

}

index++;

}

//创建最后一页的数据

sheet= workbook.createSheet(entity.getSheetName()+"_"+(sheetNo+1));

createUserModel2File(workbook, sheet,style, titleStyle, entity, pojoClass, dataSetDataBySheet);

}

/***

* 根据sheet页生成数据

* @param sheet

* @param entity

* @param pojoClass

* @param dataSet

*/

private static void createUserModel2File(HSSFWorkbook workbook,Sheet sheet,HSSFCellStyle style,HSSFCellStyle titleStyleSet,

ExcelTitle entity, Class> pojoClass, Collection> dataSet) {

try {

Drawing patriarch = sheet.createDrawingPatriarch();

List excelParams = new ArrayList();

// 得到所有字段

Field fileds[] = getClassFields(pojoClass);

ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class);

String targetId = null;

if (etarget != null) {

targetId = etarget.id();

}

getAllExcelField(targetId, fileds, excelParams, pojoClass, null);

sortAllParams(excelParams);

int index = 0;

int feildWidth = getFieldWidth(excelParams);

if (entity.getTitle() != null) {

int i =  createHeaderRow(entity, sheet, workbook, feildWidth);

sheet.createFreezePane(0, 2+i, 0, 2+i);

index += i;

} else {

sheet.createFreezePane(0, 2, 0, 2);

}

createTitleRow(entity,sheet, workbook,titleStyleSet, index, excelParams);

index += 2;

setCellWith(excelParams, sheet);

Iterator> its = dataSet.iterator();

while (its.hasNext()) {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值