1、ExeclUtil.java

public class ExcelUtil {
public static <T> HSSFWorkbook exprotExcel(String title, String[] headers, String[] getMethods, List<T> dataset) { HSSFWorkbook workbook = new HSSFWorkbook(); // 生成一个表格
HSSFSheet sheet = workbook.createSheet(title); // 设置表格默认列宽为15字节
sheet.setDefaultColumnWidth(15); // 生成一个样式
HSSFCellStyle style = workbook.createCellStyle();
// 背景色
style.setFillForegroundColor(HSSFColor.WHITE.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
// 边框
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 自动换行
style.setWrapText(true);
// 生成一个字体
HSSFFont font = workbook.createFont();
font.setColor(HSSFColor.BLACK.index);// 字色
font.setFontHeightInPoints((short) 10);// 字号
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 粗体显示
font.setFontName("宋体");
// 把字体 应用到当前样式
style.setFont(font); // 居中显示
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 生成另一个样式
HSSFCellStyle style2 = workbook.createCellStyle();
// 背景色
style2.setFillForegroundColor(HSSFColor.WHITE.index);
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
// 边框
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
// 居中显示
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 文本显示位置
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 自动换行
style2.setWrapText(true);
// 生成一个字体
HSSFFont font2 = workbook.createFont();
font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 粗体显示
// 把字体 应用到当前样式
style2.setFont(font2); // 声明一个画图的顶级管理器
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
// 定义注释的大小和位置
HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));
// 设置注释内容
comment.setString(new HSSFRichTextString("可以在poi中添加注释"));
// 设置注释作责,当鼠标移动到单元格上可以在状态栏中看到该内容
comment.setAuthor("hxx"); // 在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
HSSFRow row = sheet.createRow(0); // 表格的标题行
for (int i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
} // 创建内容
/*
* for(int i=0;i<values.length;i++) { row = sheet.createRow(i+1); for(int
* j=0;j<values[i].length();j++) { //将内容按顺序赋给对应的列对象
* row.createCell(j).setCellValue(values[i][j]); } }
*/ // 遍历集合数据,填充数据行
Iterator<T> it = dataset.iterator();// 迭代器
int index = 0;
while (it.hasNext()) {
index++;
row = sheet.createRow(index);
T t = (T) it.next();
// 利用反射,根据javabean属性的先后顺序,动态调用get方法得到属性值
// Field[] fields = t.getClass().getDeclaredFields();
for (int i = 0; i < getMethods.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style2);
// Field field = fields[i];
// String fieldName = field.getName();//属性名,例如:用户名称egpListUserMc
// 拿到属性得get方法
String getMethodName = getMethods[i];// 例如:getEgpListUserMc
try {
Class tCls = t.getClass();// 拿到JavaBean对象
// 通过javaBean对象拿到该属性的get方法
Method getMethod = tCls.getMethod(getMethodName, new Class[] {});
// 操作该对象属性的get方法,拿到属性值
Object value = getMethod.invoke(t, new Object[] {});
String gender = "";
if (value == null) {
row.createCell(i).setCellValue("");
} else {
row.createCell(i).setCellValue(value.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
} return workbook; }
}

2、js方法

/*导出*/
function exportUserList(){
var flag = confirm("确定要导出数据?");
if(flag==true){
obj = document.getElementsByName("userIdCheckbox");
ids = [];
for(k in obj){
if(obj[k].checked)
ids.push(obj[k].value);
}
if(ids =="" || ids == null){
alert("请选择要导出的数据!");
return ;
}
var url = "<%=webApp %>/pages/Ryxz/exportTxlUserList.do?ids="+ids;
window.parent.mainIframe.location.href=url;
}
}

3、Controller层

@RequestMapping("/pages/Ryxz/exportTxlUserList.do")
@ResponseBody
public Map<String, String> exportXls(String ids,HttpServletResponse response,HttpServletRequest request) throws Exception{
Map<String, String> map = new HashMap<String, String>();
String[] headers = {"姓名","性别","职务","办公电话","移动电话","电子邮箱"};//headers需与getMethods一一对应
String[] getMethods= {"getEgpListUserMc","getEgpListUserXb","getEgpListUserZjMc","getEgpListUserDh","getEgpListUserYddh","getEgpListUserEmail"};
try {
List<EgpListUser> list = new ArrayList<EgpListUser>();
//根据ids查找数据
String[] idS = ids.split(",");
for(int i=0;i<idS.length;i++) {
list.add(egpUserBaseService.getEgpListUserByEgpListUserId(idS[i]));
}
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
String fileName = "单位通讯录导出表"+sdf.format(date)+".xls";
String title = "单位通讯录导出表"; HSSFWorkbook workbook = ExcelUtil.exprotExcel(title, headers,getMethods, list); response.reset();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(), "iso-8859-1"));
OutputStream os = response.getOutputStream();
workbook.write(os);
os.flush();
os.close();
map.put("flag", "SUCCESS");
}catch (Exception e) {
logger.error("数据导出失败!", e);
map.put("flag", "ERROR");
}
return map;
}

Execl导出的更多相关文章

  1. mvc简单execl导出

    直接上代码: public static byte[] GetExecl(DataTable dt, List<string> list) { var sbHtml = new Strin ...

  2. execl 导出

    /** * 导出   是把数表中的数据添加到execl表中 */ public function export(){ $xlsData = Db('user')->select(); Vendo ...

  3. java中poi进行execl导出

    首先贴出最终导出的execl截图吧: 前台界面如下: 点击导出时,为其按钮的onclick事件添加exportDate()函数: function exportDate(){ var begin_Da ...

  4. 将表格table作为execl导出

    有时候的需求是从后台获取数据,然后将数据变成execl,进行导出,下载成execl 解决的方法是 一,比较方便的是 这有个插件 可以直接用 https://www.npmjs.com/package/ ...

  5. 在一个form里边同时执行搜索和 execl导出功能

    一个form 分搜索 和 导出<form name="searchform" id="searchform" > <input type=&q ...

  6. C#多样式EXECl导出

    sing NPOI.HPSF; using NPOI.HSSF.UserModel; using NPOI.HSSF.Util; using System; using System.Collecti ...

  7. Execl导出系统

    前台代码: <button class="btn btn-warning" type="button" onclick="location.hr ...

  8. asp.net中导出Execl的方法

    一.asp.net中导出Execl的方法: 在 asp.net中导出Execl有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址 输出在浏览器上:一种是将文件直接将文件输出流写给 ...

  9. 利用NPOI导出数据到Execl

    相信很多童鞋都开发过Execl的导入导出功能,最近产品中无论是后台数据分析的需要,还是前端满足用户管理的方便,都有Execl导入导出的维护需求产生. 以前做这个功能,如果是web,利用HttpCont ...

随机推荐

  1. mybatis_day02

    2.映射器Mapper 相当于dao层,不用写实现类(mybatis底层会采用动态代理模式 会跟我生成实现) 步骤: (1) 创建项目 配置mybatis-config.xml 和昨天一样 (2) 创 ...

  2. P3902 递增

    链接:P3902 ----------------------------------------- 这道题就是最长上升子序列的模板题,因为我们修改的时候可没说不能改成小数(暴力) --------- ...

  3. 纪中5日T1 1564. 旅游

    1564. 旅游 题目描述 输入N个数,从中选择一些出来计算出总和,问有多少种选法使得和为质数. 输入 第一行一个整数N. 第二行N个整数,表示这N个数的值. 输出 一个整数,表示方案数. 样例输入 ...

  4. 剑指offer-面试题32-之字形打印二叉树-二叉树栈

    /* 题目: 分行按层自上向下呈之字形打印二叉树.第一行从左到右,第二行从右到左,第三行从左到右... */ /* 思路: 使用两个栈stack1和stack2. stack1存储从左向右打印的节点, ...

  5. CF #619 div.2

    序 希望,不要还有一天像今天一样糟糕. T1 three strings 笔记本的google 炸了,读题可难受了 多组测试数据 我们的想法是,用string存字符串,若 对于任意的i,a[i],b[ ...

  6. python读取mongodb并提供接口

    # -*- coding: utf-8 -*- import flask, json import time import pymongo client=pymongo.MongoClient(hos ...

  7. JavaScirpt 认识DOM和BOM (汇总)

    将HTML代码分解为DOM节点层次图 DOM节点有: 1. 元素节点:上图中<html>.<body>.<p>等都是元素节点,即标签. 2. 文本节点:向用户展示的 ...

  8. Android studio中修改xml文件无效问题

    昨天遇到的这个问题,在修改布局xml文件后保存,但运行时布局却并没有被修改,也就是说我的修改无效,今天参照了这篇文章中的方法终于解决了: https://blog.csdn.net/l_o_s/art ...

  9. Java_Day7(上)

    Java learning_Day7(上) 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> ...

  10. java中生成任意之间数的随机数

    public static int cssjs(int a,int b) { Random rand=new Random(); int zhi; zhi=rand.nextInt(b)%(b-a+1 ...