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. CentOS7安装postgreSQL11

    1.添加PostgreSQL Yum存储库 sudo yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel- ...

  2. LNMP环境配置(2)

    php-fpm配置,Nginx配置 Nginx配置 默认虚拟主机 修改主配置文件 # vi  /usr/local/nginx/conf/nginx.conf 在最后 } 符号上面写入  includ ...

  3. JN_0014:win10命令窗口以管理员方式启动

    1,先打开命令窗口 2,固定到任务栏 3,右键任务栏图标 4,右键命令提示符, 5,选择以管理员方式启动.

  4. 聊聊智能指针 auto_ptr、shared_ptr、weak_ptr和unique_ptr

    本文为转载:https://www.cnblogs.com/zeppelin5/p/10083597.html,对作者有些地方做了修正. 手写代码是理解C++的最好办法,以几个例子说明C++四个智能指 ...

  5. Spring Boot源码(二):SPI去除web.xml

    SPI广泛用于dubbo,spring boot,spring cloud alibaba等 关于SPI,可见SPI-Service Provider Interface 继续上篇文章 上面三句代码的 ...

  6. 【5】激活函数的选择与权值w的初始化

    激活函数的选择: 西格玛只在二元分类的输出层还可以用,但在二元分类中,其效果不如tanh,效果不好的原因是当Z大时,斜率变化很小,会导致学习效率很差,从而很影响运算的速度.绝大多数情况下用的激活函数是 ...

  7. 关于学习java虚拟机的知识整理一:jvm内存区域

    之前由于考研,对于虚拟机的认识疏忽了太多,现在重新整理回顾一下. 如上图所示,jvm的内存区域(运行时数据区)共分为5处:方法区(Method Area).虚拟机栈(vm Stack).本地方法栈(N ...

  8. C++中c_str()的用法

    这个函数经常用到,总是记不住,记下来,方便翻阅 c_str()函数返回一个指向正规C字符串的指针,内容与string串相同. C++中c_str()主要用法就是为了与C语言兼容,在C语言中没有stri ...

  9. 54.Python中Meta类常见的配置

    对于一些模型级别的配置.我们可以通过在模型中定义一个类,叫做Meta.然后在这个类中添加一些属性来控制模型的作用. 注意:添加的这个类一定要是Meta,否者的话Django就会不能够识别. from ...

  10. linux--python3安装以及虚拟环境配置

    linux下python3的编译安装以及项目运行 普通版安装编译python3并运行项目 最好指定目录进行操作 1.解决系统的基础开发工具,防止python3编译过程出错 yum install gc ...