Execl导出
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导出的更多相关文章
- mvc简单execl导出
直接上代码: public static byte[] GetExecl(DataTable dt, List<string> list) { var sbHtml = new Strin ...
- execl 导出
/** * 导出 是把数表中的数据添加到execl表中 */ public function export(){ $xlsData = Db('user')->select(); Vendo ...
- java中poi进行execl导出
首先贴出最终导出的execl截图吧: 前台界面如下: 点击导出时,为其按钮的onclick事件添加exportDate()函数: function exportDate(){ var begin_Da ...
- 将表格table作为execl导出
有时候的需求是从后台获取数据,然后将数据变成execl,进行导出,下载成execl 解决的方法是 一,比较方便的是 这有个插件 可以直接用 https://www.npmjs.com/package/ ...
- 在一个form里边同时执行搜索和 execl导出功能
一个form 分搜索 和 导出<form name="searchform" id="searchform" > <input type=&q ...
- C#多样式EXECl导出
sing NPOI.HPSF; using NPOI.HSSF.UserModel; using NPOI.HSSF.Util; using System; using System.Collecti ...
- Execl导出系统
前台代码: <button class="btn btn-warning" type="button" onclick="location.hr ...
- asp.net中导出Execl的方法
一.asp.net中导出Execl的方法: 在 asp.net中导出Execl有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址 输出在浏览器上:一种是将文件直接将文件输出流写给 ...
- 利用NPOI导出数据到Execl
相信很多童鞋都开发过Execl的导入导出功能,最近产品中无论是后台数据分析的需要,还是前端满足用户管理的方便,都有Execl导入导出的维护需求产生. 以前做这个功能,如果是web,利用HttpCont ...
随机推荐
- GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频)
GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频) GraphQL + React Apoll ...
- 浅谈python的第三方库——pandas(一)
pandas作为python进行数据分析的常用第三方库,它是基于numpy创建的,使得运用numpy的程序也能更好地使用pandas. 1 pandas数据结构 1.1 Series 注:由于pand ...
- 剑指offer-面试题34-二叉树中和为某一值的路径-二叉树遍历
/* 题目: 输入一颗二叉树和一个整数,打印从根节点到叶子节点中所有和为该整数的路径. */ /* 思路: 先序遍历,深度遍历. 从树根开始,记录路径之和,遍历到叶子节点,如果和为期望值,则输出. 回 ...
- Vulnerable Kerbals CodeForces - 772C【拓展欧几里得建图+DAG上求最长路】
根据拓展欧几里得对于同余方程 $ax+by=c$ ,有解的条件是 $(a,b)|c$. 那么对于构造的序列的数,前一个数 $a$ 和后一个数 $b$ ,应该满足 $a*x=b(mod m)$ 即 $ ...
- hibernate报错:MappingException: Could not determine type for...解决办法
有时候实体里的一些属性并不想映射到数据库(比方说子级菜单List), 如果不做处理的话会报字段映射错误找不到这列Column Not Found 例如:org.hibernate.MappingExc ...
- CodingPlus Blog Update Info
CodingPlus更新啦! 我就是记录一下!您想知道现在的博客是第几代的吗?您想知道CodingPlus博客的发展历程吗?来,让我们一起看看! V3.5 最新版了! V3.5.0 很多人看到自然觉得 ...
- vue项目下的导入和导出
本篇博文主要记录我们在写项目的时候经常需要用到导入和导出. 导入 首先定义一个模态弹窗,一般情况下会使用一个input(设置opacity:0)覆盖在显示的按钮上面 <!-- 3.导入 --&g ...
- 树莓派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 ...
- 剑指offer-面试题7-重建二叉树-二叉树
/* 题目: 输入二叉树的前序遍历和中序遍历的结果,重建二叉树.假设输入的前序遍历和中序遍历的结果中不包含重复的数字. */ /* 思路: 使用前序遍历找到根节点,再通过中序遍历找到左子树和右子树. ...
- 代数式转换为c语言表达式(很简单)