JAVA导出Excel(支持多sheet)
一、批量导出:
/**
*
* @Title: expExcel
* @Description: 批量导出客户信息
* @param @param params
* @param @param request
* @param @param response
* @param @throws Exception
* @return void
* @throws
*/
@RequestMapping("expExcel")
public void expExcel(QueryCustomParam params,HttpServletRequest request,HttpServletResponse response) throws Exception{ User u = getUser(request.getSession());//SessionUtils.getUser(request.getSession()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd hh:mm"); //获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载
String path = request.getServletContext().getRealPath("/"); List<CustomResp> list = null;
List<ContactsResp> list2 = null;
String fileName = "我的客户导出";
String url = path + "download\\" + fileName + ".xls"; params.setEmpIds(String.valueOf(u.getEmpId()));
QueryContactsParam params2 = new QueryContactsParam();
params2.setEmpId(Long.valueOf(u.getEmpId()));
params2.setCorpId(Long.valueOf(u.getCorpId()));
params2.setFlag("4"); try { list = customService.selectMyCustom(params); //我的客户
list2 = contactsService.selectContactsList(params2); //查询我的客户包含的所有联系人信息 //数据
List<String[]> dataset = new ArrayList<String[]>();
for (int i = 0; i < list.size(); i++) {
String[] arr = new String[16];
arr[0] = list.get(i).getName()==null ? "" : list.get(i).getName().toString();
arr[1] = list.get(i).getShortName()==null ? "" : list.get(i).getShortName().toString();
arr[2] = list.get(i).getNumber()==null ? "" : list.get(i).getNumber().toString();
arr[3] = list.get(i).getAddress()==null ? "" : list.get(i).getAddress().toString();
arr[4] = list.get(i).getUrl()==null ? "" : list.get(i).getUrl().toString();
arr[5] = list.get(i).getDescription()==null ? "" : list.get(i).getDescription().toString();
arr[6] = list.get(i).getHighseasName()==null ? "" : list.get(i).getHighseasName().toString();
arr[7] = list.get(i).getHighseasDate()==null ? "" : sdf2.format(list.get(i).getHighseasDate());
arr[8] = list.get(i).getEmpName()==null ? "" : list.get(i).getEmpName().toString();
arr[9] = list.get(i).getOrganName()==null ? "" : list.get(i).getOrganName().toString();
arr[10] = ""; //领取日期 暂无数据
arr[11] = list.get(i).getExpireDate()==null ? "" : sdf2.format(list.get(i).getExpireDate());
arr[12] = "4"; //联系人数量
arr[13] = list.get(i).getCreateDate()==null ? "" : sdf2.format(list.get(i).getCreateDate());
arr[14] = list.get(i).getCustomStatusName()==null ? "" : list.get(i).getCustomStatusName().toString();
arr[15] = list.get(i).getCustomLevelName()==null ? "" : list.get(i).getCustomLevelName().toString(); dataset.add(arr);
} //数据
List<String[]> dataset2 = new ArrayList<String[]>();
for (int i = 0; i < list2.size(); i++) {
String[] arr2 = new String[16];
arr2[0] = list2.get(i).getName()==null ? "" : list2.get(i).getName().toString();
arr2[1] = list2.get(i).getSex()==null ? "" : getSex(list2.get(i).getSex());
arr2[2] = list2.get(i).getBirthday()==null ? "" : sdf.format(list2.get(i).getBirthday());
arr2[3] = "";
arr2[4] = list2.get(i).getOrganName()==null ? "" : list2.get(i).getOrganName().toString();
arr2[5] = list2.get(i).getPosition()==null ? "" : list2.get(i).getPosition().toString();
arr2[6] = list2.get(i).getCompany()==null ? "" : list2.get(i).getCompany().toString();
arr2[7] = list2.get(i).getAddress()==null ? "" : list2.get(i).getAddress().toString();
arr2[8] = list2.get(i).getUrl()==null ? "" : list2.get(i).getUrl().toString();
arr2[9] = list2.get(i).getInterest()==null ? "" : list2.get(i).getInterest().toString();
arr2[10] = list2.get(i).getRemark()==null ? "" : list2.get(i).getRemark().toString();
arr2[11] = list2.get(i).getCreateDate()==null ? "" : sdf2.format(list2.get(i).getCreateDate());
arr2[12] = list2.get(i).getCustomName()==null? "" : list2.get(i).getCustomName();
arr2[13] = list2.get(i).getEmpName()==null? "" : list2.get(i).getEmpName();
arr2[14] = list2.get(i).getContactsRoleName()==null? "" : list2.get(i).getContactsRoleName();
arr2[15] = list2.get(i).getContactsRelationName()==null? "" : list2.get(i).getContactsRelationName(); dataset2.add(arr2);
} //表头
String[] handers1 = {"客户全称","客户简称","客户编号","地址","网址","介绍","公海名称","加入公海时间","跟进人","跟进人部门","领取日期","到期日期","联系人数量","创建日期","客户状态","客户分级" };
String[] handers2 = {"姓名","性别","生日","手机","部门","职务","公司","公司地址","公司网站","兴趣爱好","备注","创建日期","客户简称","归属人","角色关系","亲密程度" }; //对象
ExcelExp e1 = new ExcelExp("我的客户", handers1, dataset);
ExcelExp e2 = new ExcelExp("客户联系人", handers2, dataset2); List<ExcelExp> mysheet = new ArrayList<ExcelExp>();
mysheet.add(e1);
mysheet.add(e2); ExcelExportUtil.exportManySheetExcel(url, mysheet); //生成sheet
ExcelExportUtil.getExcel(url, fileName, response); //下载sheet } catch (IOException e) {
e.printStackTrace();
}
}
Excel对象:
public class ExcelExp { private String fileName;// sheet的名称
private String[] handers;// sheet里的标题
private List<String[]> dataset;// sheet里的数据集 public ExcelExp(String fileName, String[] handers, List<String[]> dataset) {
this.fileName = fileName;
this.handers = handers;
this.dataset = dataset;
} //getter、setter方法 }
生成Excel:
/**
*
* @Title: exportManySheetExcel
* @Description: 可生成单个、多个sheet
* @param @param file 导出文件路径
* @param @param mysheets
* @return void
* @throws
*/
public static void exportManySheetExcel(String file, List<ExcelExp> mysheets){ HSSFWorkbook wb = new HSSFWorkbook();//创建工作薄
List<ExcelExp> sheets = mysheets; //表头样式
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
//字体样式
HSSFFont fontStyle = wb.createFont();
fontStyle.setFontName("微软雅黑");
fontStyle.setFontHeightInPoints((short)12);
fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
style.setFont(fontStyle); for(ExcelExp excel: sheets){
//新建一个sheet
HSSFSheet sheet = wb.createSheet(excel.getFileName());//获取该sheet名称 String[] handers = excel.getHanders();//获取sheet的标题名
HSSFRow rowFirst = sheet.createRow(0);//第一个sheet的第一行为标题
//写标题
for(int i=0;i<handers.length;i++){
//获取第一行的每个单元格
HSSFCell cell = rowFirst.createCell(i);
//往单元格里写数据
cell.setCellValue(handers[i]);
cell.setCellStyle(style); //加样式
sheet.setColumnWidth(i, 4000); //设置每列的列宽
} //写数据集
List<String[]> dataset = excel.getDataset();
for(int i=0;i<dataset.size();i++){
String[] data = dataset.get(i);//获取该对象 //创建数据行
HSSFRow row = sheet.createRow(i+1); for(int j=0;j<data.length;j++){
//设置对应单元格的值
row.createCell(j).setCellValue(data[j]);
}
}
} // 写文件
try { FileOutputStream out = new FileOutputStream(new File(file));
out.flush();
wb.write(out);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
JAVA导出Excel(支持多sheet)的更多相关文章
- [转载]Java导出Excel
一.需求介绍 当前B/S模式已成为应用开发的主流,而在开发企业办公系统的过程中,常常有客户这样子要求:把系统数据库中的数据导出到Excel,用户查看报表时直接用Excel打开.或者是:用户已经习惯用E ...
- java导出excel表格
java导出excel表格: 1.导入jar包 <dependency> <groupId>org.apache.poi</groupId> <artifac ...
- java导出excel报表
1.java导出excel报表: package cn.jcenterhome.util; import java.io.OutputStream;import java.util.List;impo ...
- Java导出Excel和CSV(简单Demo)
Java导出Excel和CSV的简单实现,分别使用POI和JavaCSV. JavaBean public class ReportInfo { int id; String date; int nu ...
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- java导出excel模板数据
Java导出excel数据模板,这里直接贴代码开发,流程性的走下去就是步骤: String[] colName=new String[]{"期间","科目代码" ...
- java导出excel工具类
java导出excel须要使用HSSFWorkbook这个类,须要导入poi-3.6-20091214.jar 工具类调用例如以下: package com.qlwb.business.util; i ...
- 使用JAVA导出EXCEL表格(POI)
一.POI概述 Jakarta POI 是一套用于访问微软格式文档的Java API.POI提供API给Java程序对Microsoft Office格式档案读和写的功能.在许多企业办公系统中,经常会 ...
- java导出excel报错:getOutputStream() has already been called for this response
对于java导出excel报错的问题,查了很多都说是在使用完输出流以后调用以下两行代码即可 out.clear(); out = pageContext.pushBody(); 但这也许是页面上输出时 ...
- CRM 报表导出excel时指定sheet名
如图所示,设置PageName即可: 这样导出excel时,sheet的名就有了:
随机推荐
- 8个数据清洗Python代码,复制可用,最长11行 | 资源
最近,大数据工程师Kin Lim Lee在Medium上发表了一篇文章,介绍了8个用于数据清洗的Python代码. 数据清洗,是进行数据分析和使用数据训练模型的必经之路,也是最耗费数据科学家/程序员精 ...
- IDE看代码,挺好
初学编程的时候总是收到各种警告:“刚学习编程千万不要用IDE,否则会有xxxxxx的后果”.现在工作后发现使用IDE可以方便编写和查看代码,对于较大的项目来说有很多代码,代码之间的关系也比较复杂,ID ...
- 【第八章】MySQL数据库备份—逻辑备份
一.数据库备份 1.命令简介: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql1)关于数据库名: -A, --all-databases ...
- asp.net 设计条码code 11的问题
前一段时间思考了一些条码生成的问题,其实条码也可以说是加密的文件显示. 一个条码首先要有规定 比如code 11 又 1234567890 - 这11个字符组成 而1 又用 5码 表示 "1 ...
- nginx upstream 名称下划线问题
原始配置: user nobody;worker_processes 1; #pid logs/nginx.pid; worker_connections 1024;} http ...
- ES6的新特性(4)——字符串的扩展
字符串的扩展 ES6 加强了对 Unicode 的支持,并且扩展了字符串对象. 字符的 Unicode 表示法 JavaScript 允许采用\uxxxx形式表示一个字在\u0000~\uFFFF之间 ...
- Scrum立会报告+燃尽图(十一月十五日总第二十三次):代码规范与技术交流
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2384 项目地址:https://git.coding.net/zhang ...
- 2nd 燃尽图
燃尽图(burn down chart) 在项目完成之前,对需要完成的工作所作的一种可视化表示.燃尽图主要用于向项目组成员和用户提供一个工作进展的公共视图,用以描述项目的实现状态.一般来说,常常用于形 ...
- idea 复制数据库查询结果,粘贴直接生成insert into 语句
遇到一个场景,需要将数据库查询的结果导入到另外一个数据库中,给我的第一感受是,写程序,从数据库A中获取到数据,在插入到数据库B中. 但是Idea 可以直接复制查询结果,然后粘贴生成insert语句. ...
- 利用书签功能对TDBGrid控件中多个记录的处理
DELPHI 的TDBGrid 控 件 主 要 用 来 处 理 数 据 表, 它 的 属 性 中 有 一 个dgMultiSelect, 若 此 属 性 设 定 为TRUE, 则 可 以 选 中 多 ...