poi导出动态行动态列_POI动态合并行和列

作者姓名 修改时间 版本号 描述

*/

public class PoiExportAutoMergeRowAndColumn {

private static final Logger logger = LoggerFactory.getLogger(PoiExportAutoMergeRowAndColumn.class);

public static void exportTest(String excelName, Listlist, LinkedHashMap fieldMap) {

// 设置默认文件名为当前时间:年月日时分秒

if (excelName == null || excelName == "") {

excelName = new SimpleDateFormat("yyyyMMddhhmmss").format(

new Date()).toString();

}

try {

//创建一个WorkBook,对应一个Excel文件

HSSFWorkbook wb = new HSSFWorkbook();

//在Workbook中,创建一个sheet,对应Excel中的工作薄(sheet)

HSSFSheet sheet = wb.createSheet(excelName);

//创建单元格,并设置值表头 设置表头居中

HSSFCellStyle style = wb.createCellStyle();

//创建一个居中格式

//style.setAlignment(ALIGN_CENTER);

style.setAlignment(HorizontalAlignment.CENTER);

// 填充工作表

fillSheet(sheet, list, fieldMap, style);

FileOutputStream dd = new FileOutputStream("c://test.xls");

//将文件输出

OutputStream ouputStream = dd;

wb.write(ouputStream);

ouputStream.flush();

ouputStream.close();

} catch (Exception e) {

logger.info("导出Excel失败!");

logger.error(e.getMessage());

}

}

/**

根据字段名获取字段对象

@param fieldName 字段名

@param clazz 包含该字段的类

@return 字段

*/

public static Field getFieldByName(String fieldName, Class> clazz) {

// logger.info("根据字段名获取字段对象:getFieldByName()");

// 拿到本类的所有字段

Field[] selfFields = clazz.getDeclaredFields();

// 如果本类中存在该字段,则返回

for (Field field : selfFields) {

//如果本类中存在该字段,则返回

if (field.getName().equals(fieldName)) {

return field;

}

}

// 否则,查看父类中是否存在此字段,如果有则返回

Class> superClazz = clazz.getSuperclass();

if (superClazz != null && superClazz != Object.class) {

//递归

return getFieldByName(fieldName, superClazz);

}

// 如果本类和父类都没有,则返回空

return null;

}

/**

根据字段名获取字段值

@param fieldName 字段名

@param o 对象

@return 字段值

@throws Exception 异常

*/

public static Object getFieldValueByName(String fieldName, Object o)

throws Exception {

if (o instanceof HashMap) {

return ((HashMap) o).get(fieldName);

}

// logger.info("根据字段名获取字段值:getFieldValueByName()");

Object value = null;

//根据字段名得到字段对象

Field field = getFieldByName(fieldName, o.getClass());

//如果该字段存在,则取出该字段的值

if (field != null) {

field.setAccessible(true);//类中的成员变量为private,在类外边使用属性值,故必须进行此操作

value = field.get(o);//获取当前对象中当前Field的value

} else {

throw new Exception(o.getClass().getSimpleName() + "类不存在字段名 "

+ fieldName);

}

return value;

}

/**

根据带路径或不带路径的属性名获取属性值,即接受简单属性名,

如userName等,又接受带路径的属性名,如student.department.name等

@param fieldNameSequence 带路径的属性名或简单属性名

@param o 对象

@return 属性值

@throws Exception 异常

*/

public static Object getFieldValueByNameSequence(String fieldNameSequence,

Object o) throws Exception {

// logger.info("根据带路径或不带路径的属性名获取属性值,即接受简单属性名:getFieldValueByNameSequence()");

Object value = null;

// 将fieldNameSequence进行拆分

String[] attributes = fieldNameSequence.split("\.");

if (attributes.length == 1) {

value = getFieldValueByName(fieldNameSequence, o);

} else {

// 根据数组中第一个连接属性名获取连接属性对象,如student.department.name

Object fieldObj = getFieldValueByName(attributes[0], o);

//截取除第一个属性名之后的路径

String subFieldNameSequence = fieldNameSequence

.substring(fieldNameSequence.indexOf(".") +

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值