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. GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频)

    GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频) GraphQL + React Apoll ...

  2. 浅谈python的第三方库——pandas(一)

    pandas作为python进行数据分析的常用第三方库,它是基于numpy创建的,使得运用numpy的程序也能更好地使用pandas. 1 pandas数据结构 1.1 Series 注:由于pand ...

  3. 剑指offer-面试题34-二叉树中和为某一值的路径-二叉树遍历

    /* 题目: 输入一颗二叉树和一个整数,打印从根节点到叶子节点中所有和为该整数的路径. */ /* 思路: 先序遍历,深度遍历. 从树根开始,记录路径之和,遍历到叶子节点,如果和为期望值,则输出. 回 ...

  4. Vulnerable Kerbals CodeForces - 772C【拓展欧几里得建图+DAG上求最长路】

    根据拓展欧几里得对于同余方程 $ax+by=c$ ,有解的条件是 $(a,b)|c$. 那么对于构造的序列的数,前一个数 $a$  和后一个数 $b$ ,应该满足 $a*x=b(mod m)$ 即 $ ...

  5. hibernate报错:MappingException: Could not determine type for...解决办法

    有时候实体里的一些属性并不想映射到数据库(比方说子级菜单List), 如果不做处理的话会报字段映射错误找不到这列Column Not Found 例如:org.hibernate.MappingExc ...

  6. CodingPlus Blog Update Info

    CodingPlus更新啦! 我就是记录一下!您想知道现在的博客是第几代的吗?您想知道CodingPlus博客的发展历程吗?来,让我们一起看看! V3.5 最新版了! V3.5.0 很多人看到自然觉得 ...

  7. vue项目下的导入和导出

    本篇博文主要记录我们在写项目的时候经常需要用到导入和导出. 导入 首先定义一个模态弹窗,一般情况下会使用一个input(设置opacity:0)覆盖在显示的按钮上面 <!-- 3.导入 --&g ...

  8. 树莓派pip安装opencv报错,Could not find a version that satisfies the requirement cv2 (from versions: )No matching distribution found for cv2

    前言 我在使用pip install opencv-python 时报错 Could not find a version that satisfies the requirement opencv ...

  9. 剑指offer-面试题7-重建二叉树-二叉树

    /* 题目: 输入二叉树的前序遍历和中序遍历的结果,重建二叉树.假设输入的前序遍历和中序遍历的结果中不包含重复的数字. */ /* 思路: 使用前序遍历找到根节点,再通过中序遍历找到左子树和右子树. ...

  10. 代数式转换为c语言表达式(很简单)