package com.huawei.utils;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;

import com.cdsxt.dao.UsersDAO;

public class ExcelUtil {

/**
* 我们传入数据 生成的excel的title 列的名字 然后得到workbook
* @param title 生成的excel的名字
* @param headers 列的显示名称 header和include要一对一
* @param include 显示的列
* @param data 传入的数据
*
* @return wb 生成的WorkBook
*/
public static <T> Workbook export(String title,Map<String,String> params,List<T> data){
//生成workbook
Workbook wb = new HSSFWorkbook();

Sheet sheet = wb.createSheet("Sheet 1");

//构建title
Row title_row = sheet.createRow(0);
Cell title_cell = title_row.createCell(0);
//设置值
title_cell.setCellValue(title);
//设置样式
CellStyle title_style = wb.createCellStyle();
title_style.setAlignment(CellStyle.ALIGN_CENTER);
title_style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
title_cell.setCellStyle(title_style);
sheet.addMergedRegion(new CellRangeAddress(0,0,0,params.size()-1));
//设置行高
title_row.setHeight((short)(20*20));

//构建表头
Row header_row = sheet.createRow(1);

int ii = 0;

for(String key:params.keySet()){
sheet.setColumnWidth(ii, 256*24);
Cell header_cell = header_row.createCell(ii);
//设置值
header_cell.setCellValue(params.get(key));
//设置样式
header_cell.setCellStyle(title_style);
ii++;
}

//得到一个样本 主要用于反射结构信息
//T d = data.get(0);
//Class<?> clazz = d.getClass();

Class<?> clazz = data.get(0).getClass();

//得到列(Field)
//Field []fields = clazz.getDeclaredFields();

try{
for(int i=0;i<data.size();i++){
//表示一行
Row row = sheet.createRow(i+2);
T temp = data.get(i);
//遍历属性 (列)
int j=0;
for(String key :params.keySet()){
//创建一个单元格
Cell cell = row.createCell(j);
Method method = clazz.getDeclaredMethod(BeanUtil.getter(key));
Object value = method.invoke(temp);

if(value==null){
cell.setCellValue("");
}else{
if(value instanceof Date){
//如果是日期类型 需要强转 而且需要设置格式
cell.setCellValue((Date)value);
//创建一个style
CellStyle style = wb.createCellStyle();
//创建一个数据格式化器
style.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("yyyy年MM月dd日 hh:mm:ss"));
cell.setCellStyle(style);
}else if(value instanceof Number){ //判断是否为数字
cell.setCellValue(Double.parseDouble(value+""));
}else if(value instanceof String){
if(Pattern.matches("^\\d+(\\.\\d+)?$", value+"")){ //判断是否为纯数字的字符串
cell.setCellValue(Double.parseDouble(value+""));
}else{
cell.setCellValue(value+"");
}
}
}
j++;
}
}
}catch (Exception e) {
e.printStackTrace();
}

return wb;
}

public static <T> Workbook export(String title,String []headers,String []include,List<T> data){
//生成workbook
Workbook wb = new HSSFWorkbook();

Sheet sheet = wb.createSheet("Sheet 1");

//构建title
Row title_row = sheet.createRow(0);
Cell title_cell = title_row.createCell(0);
//设置值
title_cell.setCellValue(title);
//设置样式
CellStyle title_style = wb.createCellStyle();
title_style.setAlignment(CellStyle.ALIGN_CENTER);
title_style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
title_cell.setCellStyle(title_style);
sheet.addMergedRegion(new CellRangeAddress(0,0,0,headers.length-1));
//设置行高
title_row.setHeight((short)(20*20));

//构建表头
Row header_row = sheet.createRow(1);
for(int i=0;i<headers.length;i++){
sheet.setColumnWidth(i, 256*24);
Cell header_cell = header_row.createCell(i);
//设置值
header_cell.setCellValue(headers[i]);
//设置样式
header_cell.setCellStyle(title_style);
}

//得到一个样本 主要用于反射结构信息
//T d = data.get(0);
//Class<?> clazz = d.getClass();

Class<?> clazz = data.get(0).getClass();

//得到列(Field)
//Field []fields = clazz.getDeclaredFields();

try{
for(int i=0;i<data.size();i++){
//表示一行
Row row = sheet.createRow(i+2);
T temp = data.get(i);
//遍历属性 (列)
for(int j=0;j<include.length;j++){
//创建一个单元格
Cell cell = row.createCell(j);
Method method = clazz.getDeclaredMethod(BeanUtil.getter(include[j]));
Object value = method.invoke(temp);

if(value==null){
cell.setCellValue("");
}else{
if(value instanceof Date){
//如果是日期类型 需要强转 而且需要设置格式
cell.setCellValue((Date)value);
//创建一个style
CellStyle style = wb.createCellStyle();
//创建一个数据格式化器
style.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("yyyy年MM月dd日 hh:mm:ss"));
cell.setCellStyle(style);
}else if(value instanceof Number){ //判断是否为数字
cell.setCellValue(Double.parseDouble(value+""));
}else if(value instanceof String){
if(Pattern.matches("^\\d+(\\.\\d+)?$", value+"")){ //判断是否为纯数字的字符串
cell.setCellValue(Double.parseDouble(value+""));
}else{
cell.setCellValue(value+"");
}
}
}
}
}
}catch (Exception e) {
e.printStackTrace();
}

return wb;
}

/**
* 我们传入数据 生成的excel的title 列的名字 然后得到workbook
* @param title 生成的excel的名字
* @param headers 列的显示名称
* @param data 传入的数据
*
* @return wb 生成的WorkBook
*/

public static <T> Workbook export(String title,String []headers,List<T> data){
//生成workbook
Workbook wb = new HSSFWorkbook();

Sheet sheet = wb.createSheet("Sheet 1");

//构建title
Row title_row = sheet.createRow(0);
Cell title_cell = title_row.createCell(0);
//设置值
title_cell.setCellValue(title);
//设置样式
CellStyle title_style = wb.createCellStyle();
title_style.setAlignment(CellStyle.ALIGN_CENTER);
title_style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
title_cell.setCellStyle(title_style);
sheet.addMergedRegion(new CellRangeAddress(0,0,0,headers.length-1));
//设置行高
title_row.setHeight((short)(20*20));

//构建表头
Row header_row = sheet.createRow(1);
for(int i=0;i<headers.length;i++){
sheet.setColumnWidth(i, 256*24);
Cell header_cell = header_row.createCell(i);
//设置值
header_cell.setCellValue(headers[i]);
//设置样式
header_cell.setCellStyle(title_style);
}

//得到一个样本 主要用于反射结构信息
//T d = data.get(0);
//Class<?> clazz = d.getClass();

Class<?> clazz = data.get(0).getClass();

//得到列(Field)
Field []fields = clazz.getDeclaredFields();

try{
for(int i=0;i<data.size();i++){
//表示一行
Row row = sheet.createRow(i+2);
T temp = data.get(i);
//遍历属性 (列)
for(int j=0;j<fields.length;j++){
//创建一个单元格
Cell cell = row.createCell(j);
Method method = clazz.getDeclaredMethod(BeanUtil.getter(fields[j]));

Object value = method.invoke(temp);

if(value==null){
cell.setCellValue("");
}else{
if(value instanceof Date){
//如果是日期类型 需要强转 而且需要设置格式
cell.setCellValue((Date)value);
//创建一个style
CellStyle style = wb.createCellStyle();
//创建一个数据格式化器
style.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("yyyy年MM月dd日 hh:mm:ss"));
cell.setCellStyle(style);
}else if(value instanceof Number){ //判断是否为数字
cell.setCellValue(Double.parseDouble(value+""));
}else if(value instanceof String){
if(Pattern.matches("^\\d+(\\.\\d+)?$", value+"")){ //判断是否为纯数字的字符串
cell.setCellValue(Double.parseDouble(value+""));
}else{
cell.setCellValue(value+"");
}
}
}
}
}
}catch (Exception e) {
e.printStackTrace();
}

return wb;
}

public static void main(String[] args) {
UsersDAO dao = new UsersDAO();

Workbook wb = export("用户信息", new String[]{"ID","用户名","年龄","邮箱"},new String[]{"id","username","age","email"}, dao.findAll());

try {
FileOutputStream out = new FileOutputStream("F:/text-export.xls");
wb.write(out);
out.flush();
out.close();
wb.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

package com.huawei.utils;

import java.lang.reflect.Field;

/**
* bean 工具
* @author Administrator
*
*/
public class BeanUtil {

/**
* 获取set方法名
* 获取标名
* @param clazz
*/
public static String getTableName(Class<?> clazz){
//获取类名
String name = clazz.getSimpleName();
name = name.substring(0, 1).toLowerCase()+name.substring(1);
return name;
}

/**
* @param field
* @return
*/
public static String setter(Field field){
String name = field.getName();
return "set"+name.substring(0,1).toUpperCase()+name.substring(1);
}
public static String getter(Field field){
return getter(field.getName());
}
public static String getter(String name){
return "get"+name.substring(0,1).toUpperCase()+name.substring(1);
}

public static String getColumnName(Field field){
String name = field.getName();
return name.substring(0,1).toLowerCase()+name.substring(1);
}
}

对excel进行封装的更多相关文章

  1. python之excel的封装

    python之excel的封装 将所有excel的操作都使用面向对象的思维进行封装,即将所有操作都放入一个类中即为封装. 它将excel的处理极大程度的进行了简化操作 封装前需要先处理的操作: 1.在 ...

  2. NPOI读写Excel组件封装Excel导入导出组件

    后台管理系统多数情况会与Excel打交道,常见的就是Excel的导入导出,对于Excel的操作往往是繁琐且容易出错的,对于后台系统的导入导出交互过程往往是固定的,对于这部分操作,我们可以抽离出公共组件 ...

  3. c# 导入导出excel方法封装

    在很多项目中,都会使用到文件的上传下载等,为了方便,封装了一个帮助类,每次直接拿过来使用就可以了,下面是封装的类和使用方法. using Common.AttributeHelper; using N ...

  4. libxl库的介绍,对Excel操作封装得很好的一个库,兼容2007版和多字节字符(最后有破解版下载)

    前段时间忙着毕业论文,终于有时间写博客了. 早些时候老大给我的一个任务需要对excel进行读表操作,研究了一下c++对excel的操作. 对Excel的操作基本有com,ODBC,AD等,其中ODBC ...

  5. python中操作excel数据 封装成一个类

    本文用python中openpyxl库,封装成excel数据的读写方法 from openpyxl import load_workbook from openpyxl.worksheet.works ...

  6. DataGridView 导出Excel (封装)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  7. 通过封装openpyxl模块实现自己的Excel操作类

    """ excel类封装需要提供以下功能: 1.选择表单功能 2.读取一个单元格的数据功能 3.读取一行数据功能 4.读取表单中所有数据功能 5.往单元格中写入数据功能 ...

  8. C#实现Excel模板导出和从Excel导入数据

    午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.封装的Exc ...

  9. python selenium中Excel数据维护(二)

    接着python里面的xlrd模块详解(一)中我们我们来举一个实例: 我们来举一个从Excel中读取账号和密码的例子并调用: ♦1.制作Excel我们要对以上输入的用户名和密码进行参数化,使得这些数据 ...

随机推荐

  1. Redis 列表 List 主要操作函数

    /** * redis 列表 List Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部(左边)或者尾部(右边) */ //lpush 新增一个列,多个列可以用空格隔 ...

  2. python string 之 format

    python 在 2.6之后支持了string的format功能, 很强大, 应该成为使用习惯. http://blog.csdn.net/handsomekang/article/details/9 ...

  3. javascript把json串转成对象

    // 这个是待转的json串 var jstr = "{'a':100,'b':'aaa'}"; // 经过下面语句把这个语句描述的对象数据,赋给这个m对象了 eval (&quo ...

  4. 关于浏览器和IIS基础的简单理解

    浏览器 输入域名或者IP地址,按回车访问后:发生了什么??IIS是如何工作的?为什么能这么工作?? 1    浏览器和IIS 分别是两个应用程序:浏览器访问网址实际就是  两个应用程序的数据交互往来: ...

  5. qt 把整形数据转换成固定长度字符串(转)

    QString ToStr(int number, int size){ return QString("%1").arg(number, size, 10, QChar('0') ...

  6. poj 2187 Beauty Contest——旋转卡壳

    题目:http://poj.org/problem?id=2187 学习材料:https://blog.csdn.net/wang_heng199/article/details/74477738 h ...

  7. 使用BeanShell 对比取出来的值

    描述: 使用BeanShell 对比取出来的值,如不一致,报错 步骤一: 使用json Extractor后置处理器,取出"登入成功" 使用BeanS hell断言: 语法: if ...

  8. java http头信息

    JAVA 从http请求头中获取Header信息: request.getHeader(),request.getHeaderNames(),request.getHeaders() Java获取Ht ...

  9. SQL 函数:树结构指定父节点遍历所有的子节点

    CREATE function [dbo].[Get_DepChildren] ( @ID int ) , ),PID ), Name )) as begin --declare @ID Int -- ...

  10. 数据报表类(BI)项目测试应该如何去啃?

    测试工作是一项十分枯燥的工作,与之相对的测试人员必须有足够的耐心.绝对的细心等素质才能完美的完成这项工作. 从最初的瀑布模式,到如今风靡的敏捷,Devops等:从最初的最后一道关卡到渗透至各个流程,再 ...