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. Docker实战部署JavaWeb项目-基于SpringBoot

    最近在滴滴云上看到服务器很便宜,1核2G,1年只需要68块钱.下面是我基于Docker部署Javaweb服务的过程.目前我见过的最便宜的服务器,阿里云打折的时候都没有这么便宜啊,果断入手.有需要的话可 ...

  2. Uva12034 (组合数取模)

    题意:两匹马比赛有三种比赛结果,n匹马比赛的所有可能结果总数 解法: 设答案是f[n],则假设第一名有i个人,有C(n,i)种可能,接下来还有f(n-i)种可能性,因此答案为 ΣC(n,i)f(n-i ...

  3. php 获取当前目录和当前文件夹

    <?php /** * PHP获取路径或目录实现 */ //魔术变量,获取当前文件的绝对路径 echo "__FILE__: ========> ".__FILE__; ...

  4. JAVA 递归线程池测试 ExecutorService / ForkJoinPool

    测试工具使用递归的方式获取子进程的Msg消息,目前有2种常用的ExecutorService / ForkJoinPool 为了测试哪种效果较好,我们来写个测试Demo,循环5555555次+1(加锁 ...

  5. Redis的主从复制与Redis Sentinel哨兵机制

    1    Redis的主从复制 1.1   什么是主从复制 持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损 ...

  6. linux(服务器)如何确认网卡(网口)对应的配置文件

    服务器装完系统就要配置网络,然而服务器经常是多网卡多网口,我们在某个网口插上网线后,到/etc/sysconfig/network-scripts/下配置ip时无法确定网口对应的配置文件.(比如是et ...

  7. linux基础之IO模型

    一.IO模型 一次read操作: (1)等待数据准备好:从磁盘到内核内存 (2)从内核内存复制到进程内存 示意图如下: I/O类型: 同步和异步:synchronous,asynchronous 关注 ...

  8. C语言递归之二叉树的最小深度

    题目描述 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例 输入:[3,9,20,null,null,15,7] ...

  9. Cenos7下指定ftp用户限制在特定目录下(亲身实践)

    好了,废话不多说.上头下来个需求,让我给别人开个ftp账户,只能访问项目的目录,不能访问项目外的目录,就算cd切换目录也不行. 开始: 第一步;安装ftp,我用的是centos7,只需敲入命令 yum ...

  10. 安装APACHE到CentOS(YUM)

    运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:httpd-2.4.6 硬件要求:无 安装过程 1.安装YUM-EPEL源 HTTP-Tools ...