关于java poi 大数据导出 创建多个sheet
2017-03-02 13:47
489 查看
哎,最近碰见一个非常让人郁闷的需求,导出数据并且是数十万乃至百万,这就有些蛋疼了,没办法产品最大吗! 做呗于是便考虑同时导出多个Excel表格,说做边做,结果自然是失败了,最后发现在导出第一个Excel的流出的时候,边关流了以至于后面的Excel表格就失败了.于是乎就换了种方法,那就导出一个Excel表格但里面存在多个sheet.不说了贴代码,希望可以帮助到一些人,像我一样的初学者.
@RequestMapping(value = "v_export.do")
public void v_export(HttpServletRequest request, HttpServletResponse response, UserInvestExcel userInvestExcel) {
Map<String,Object> paramMap = new HashMap<String,Object>();
//创建输出流
OutputStream outStream = null;
XSSFWorkbook workBook = new XSSFWorkbook();//创建工作薄
try {
//创建xlsx的名字
final String fileName = "投资会员信息"+ DateUtil.getTodayYYYYMMDDHHMMSS()+".xlsx";
//创建列头
String[] headers = { "用户id", "用户名", "真实姓名", "身份证号", "手机号", "银行卡号","注册来源","注册时间","认证时间","渠道id","风险等级","邀请人"};
String one = "1";
Long l = Long.parseLong(one);
paramMap.put("bankId",l);
if(userInvestExcel.getUserId()!=null && userInvestExcel.getUserId()!=""){
paramMap.put("userId",Long.parseLong(userInvestExcel.getUserId()));
}
paramMap.put("loginName",userInvestExcel.getLoginName());
paramMap.put("realName",userInvestExcel.getRealName());
paramMap.put("regSource",userInvestExcel.getRegSource());
paramMap.put("boundPhone",userInvestExcel.getBoundPhone());
paramMap.put("resultName",userInvestExcel.getResultName());
paramMap.put("regBeginTime",userInvestExcel.getRegBeginTime());
paramMap.put("regEndTime",userInvestExcel.getRegEndTime());
paramMap.put("authBeginTime",userInvestExcel.getAuthBeginTime());
paramMap.put("authEndTime",userInvestExcel.getAuthEndTime());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Map<String,Object> mapResult = userReadService.findUserInfoListByParams(paramMap);
List<UserVOChild> list = (List<UserVOChild>)mapResult.get("list");//要导出数据
int total = (Integer)mapResult.get("count");//总计录数
List<UserInvestExcel> userExcelList = new ArrayList<UserInvestExcel>();
//计算有几个excel
int countExcel = total/50000+(total%50000==0?0:1);
for(int i = 1;i <= countExcel;i++){
//清空list
if(userExcelList.size()>0){
userExcelList.clear();
}
XSSFSheet sheet = workBook.createSheet("表格"+i);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 18);
// 生成一个样式
XSSFCellStyle 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.setAlignment(HSSFCellStyle.ALIGN_LEFT);
// 生成一个字体
//HSSFFont font = workbook.createFont();
XSSFFont font = workBook.createFont();
font.setColor(XSSFFont.COLOR_NORMAL);
font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style.setFont(font);
// 生成并设置另一个样式
XSSFCellStyle 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_LEFT);
// 生成另一个字体
XSSFFont font2 = workBook.createFont();
font2.setBoldweight(XSSFFont.BOLDWEIGHT_NORMAL);
font.setColor(XSSFFont.COLOR_NORMAL);
// 把字体应用到当前的样式
style2.setFont(font2);
XSSFRow row = sheet.createRow(0);
for (short k = 0; k < headers.length; k++) {
XSSFCell cell = row.createCell(k);
cell.setCellStyle(style);
cell.setCellType(XSSFCell.CELL_TYPE_STRING);
XSSFRichTextString text = new XSSFRichTextString(headers[k]);
cell.setCellValue(text);
}
int list_num_start = 50000*(i-1);//开始下标
int list_num_end = (countExcel==i?(i-1):i)*50000+(countExcel==i?total%50000:0);//结束下标
for(int j = list_num_start;j < list_num_end;j++){
UserInvestExcel userInvestExcelByDate = new UserInvestExcel();
userInvestExcelByDate.setUserId(list.get(j).getId()+"");
userInvestExcelByDate.setLoginName(list.get(j).getName());
userInvestExcelByDate.setRealName(list.get(j).getRealName());
userInvestExcelByDate.setIdno(list.get(j).getIdnoByX());
userInvestExcelByDate.setBoundPhone(list.get(j).getBoundPhoneByX());
userInvestExcelByDate.setBankCard(list.get(j).getBankCardByX());
if(list.get(j).getRegSource()==null){
userInvestExcelByDate.setRegSource("未知");
}else{
if
bf83
(list.get(j).getRegSource().equals("1")){
userInvestExcelByDate.setRegSource("网站注册");
}else if(list.get(j).getRegSource().equals("2")){
userInvestExcelByDate.setRegSource("手机客户端注册");
}else if(list.get(j).getRegSource().equals("3")){
userInvestExcelByDate.setRegSource("分享");
}else if(list.get(j).getRegSource().equals("4")){
userInvestExcelByDate.setRegSource("M站");
}else if(list.get(j).getRegSource().equals("5")){
userInvestExcelByDate.setRegSource("安卓");
}else if(list.get(j).getRegSource().equals("6")){
userInvestExcelByDate.setRegSource("IOS");
}else if(list.get(j).getRegSource().equals("7")){
userInvestExcelByDate.setRegSource("微信公众号");
}else if(list.get(j).getRegSource().equals("8")){
userInvestExcelByDate.setRegSource("红包");
}else if(list.get(j).getRegSource().equals("9")){
userInvestExcelByDate.setRegSource("转盘");
}else if(list.get(j).getRegSource().equals("77")) {
userInvestExcelByDate.setRegSource("微信");
}else{
userInvestExcelByDate.setRegSource("未知");
}
}
userInvestExcelByDate.setRegTime(list.get(j).getRegTime());
userInvestExcelByDate.setAuthTime(list.get(j).getAuthTime());
userInvestExcelByDate.setChannel(list.get(j).getChannel());
userInvestExcelByDate.setResultName(list.get(j).getResultName());
userInvestExcelByDate.setYqrName(list.get(j).getYqrName());
userExcelList.add(userInvestExcelByDate);
}
// 遍历集合数据,产生数据行
XSSFRow rowTemp = null;
XSSFCell cellTemp = null;
for(int p = 0;p < userExcelList.size();p++){
UserInvestExcel require = userExcelList.get(p);
rowTemp = sheet.createRow(p+1);
//产生数据
int count = 0;
cellTemp = rowTemp.createCell(count++);
cellTemp.setCellValue(require.getUserId());
cellTemp = rowTemp.createCell(count++);
cellTemp.setCellValue(require.getLoginName());
cellTemp = rowTemp.createCell(count++);
if(require.getRealName()!=null){
cellTemp.setCellValue(require.getRealName());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getIdno()!=null){
cellTemp.setCellValue(require.getIdno());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getBoundPhone()!=null){
cellTemp.setCellValue(require.getBoundPhone());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getBankCard()!=null){
cellTemp.setCellValue(require.getBankCard());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getRegSource()!=null){
cellTemp.setCellValue(require.getRegSource());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getRegTime()!=null){
cellTemp.setCellValue(sdf.format(require.getRegTime()).toString());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getAuthTime()!=null){
cellTemp.setCellValue(sdf.format(require.getAuthTime()).toString());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getChannel()!=null){
cellTemp.setCellValue(require.getChannel());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getResultName()!=null){
cellTemp.setCellValue(require.getResultName());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getYqrName()!=null){
cellTemp.setCellValue(require.getYqrName());
}else{
cellTemp.setCellValue("");
}
}
response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName).getBytes(), "ISO-8859-1"));//设定输出文件头
response.setContentType("application/vnd.ms-excel;charset=UTF-8");// 定义输出类型
outStream = response.getOutputStream();
}
workBook.write(outStream);
outStream.close();
logger.info(MyUtils.getUser(request).getUserRename()+".................");
this.saveLog(request, "导出成功" , null);
} catch (Exception e) {
// TODO: handle exception
logger.error(MyUtils.getUser(request).getUserRename()+":::"+e.getMessage());
this.saveLog(request, "导出失败" , e.getMessage());
}
}
@RequestMapping(value = "v_export.do")
public void v_export(HttpServletRequest request, HttpServletResponse response, UserInvestExcel userInvestExcel) {
Map<String,Object> paramMap = new HashMap<String,Object>();
//创建输出流
OutputStream outStream = null;
XSSFWorkbook workBook = new XSSFWorkbook();//创建工作薄
try {
//创建xlsx的名字
final String fileName = "投资会员信息"+ DateUtil.getTodayYYYYMMDDHHMMSS()+".xlsx";
//创建列头
String[] headers = { "用户id", "用户名", "真实姓名", "身份证号", "手机号", "银行卡号","注册来源","注册时间","认证时间","渠道id","风险等级","邀请人"};
String one = "1";
Long l = Long.parseLong(one);
paramMap.put("bankId",l);
if(userInvestExcel.getUserId()!=null && userInvestExcel.getUserId()!=""){
paramMap.put("userId",Long.parseLong(userInvestExcel.getUserId()));
}
paramMap.put("loginName",userInvestExcel.getLoginName());
paramMap.put("realName",userInvestExcel.getRealName());
paramMap.put("regSource",userInvestExcel.getRegSource());
paramMap.put("boundPhone",userInvestExcel.getBoundPhone());
paramMap.put("resultName",userInvestExcel.getResultName());
paramMap.put("regBeginTime",userInvestExcel.getRegBeginTime());
paramMap.put("regEndTime",userInvestExcel.getRegEndTime());
paramMap.put("authBeginTime",userInvestExcel.getAuthBeginTime());
paramMap.put("authEndTime",userInvestExcel.getAuthEndTime());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Map<String,Object> mapResult = userReadService.findUserInfoListByParams(paramMap);
List<UserVOChild> list = (List<UserVOChild>)mapResult.get("list");//要导出数据
int total = (Integer)mapResult.get("count");//总计录数
List<UserInvestExcel> userExcelList = new ArrayList<UserInvestExcel>();
//计算有几个excel
int countExcel = total/50000+(total%50000==0?0:1);
for(int i = 1;i <= countExcel;i++){
//清空list
if(userExcelList.size()>0){
userExcelList.clear();
}
XSSFSheet sheet = workBook.createSheet("表格"+i);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 18);
// 生成一个样式
XSSFCellStyle 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.setAlignment(HSSFCellStyle.ALIGN_LEFT);
// 生成一个字体
//HSSFFont font = workbook.createFont();
XSSFFont font = workBook.createFont();
font.setColor(XSSFFont.COLOR_NORMAL);
font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style.setFont(font);
// 生成并设置另一个样式
XSSFCellStyle 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_LEFT);
// 生成另一个字体
XSSFFont font2 = workBook.createFont();
font2.setBoldweight(XSSFFont.BOLDWEIGHT_NORMAL);
font.setColor(XSSFFont.COLOR_NORMAL);
// 把字体应用到当前的样式
style2.setFont(font2);
XSSFRow row = sheet.createRow(0);
for (short k = 0; k < headers.length; k++) {
XSSFCell cell = row.createCell(k);
cell.setCellStyle(style);
cell.setCellType(XSSFCell.CELL_TYPE_STRING);
XSSFRichTextString text = new XSSFRichTextString(headers[k]);
cell.setCellValue(text);
}
int list_num_start = 50000*(i-1);//开始下标
int list_num_end = (countExcel==i?(i-1):i)*50000+(countExcel==i?total%50000:0);//结束下标
for(int j = list_num_start;j < list_num_end;j++){
UserInvestExcel userInvestExcelByDate = new UserInvestExcel();
userInvestExcelByDate.setUserId(list.get(j).getId()+"");
userInvestExcelByDate.setLoginName(list.get(j).getName());
userInvestExcelByDate.setRealName(list.get(j).getRealName());
userInvestExcelByDate.setIdno(list.get(j).getIdnoByX());
userInvestExcelByDate.setBoundPhone(list.get(j).getBoundPhoneByX());
userInvestExcelByDate.setBankCard(list.get(j).getBankCardByX());
if(list.get(j).getRegSource()==null){
userInvestExcelByDate.setRegSource("未知");
}else{
if
bf83
(list.get(j).getRegSource().equals("1")){
userInvestExcelByDate.setRegSource("网站注册");
}else if(list.get(j).getRegSource().equals("2")){
userInvestExcelByDate.setRegSource("手机客户端注册");
}else if(list.get(j).getRegSource().equals("3")){
userInvestExcelByDate.setRegSource("分享");
}else if(list.get(j).getRegSource().equals("4")){
userInvestExcelByDate.setRegSource("M站");
}else if(list.get(j).getRegSource().equals("5")){
userInvestExcelByDate.setRegSource("安卓");
}else if(list.get(j).getRegSource().equals("6")){
userInvestExcelByDate.setRegSource("IOS");
}else if(list.get(j).getRegSource().equals("7")){
userInvestExcelByDate.setRegSource("微信公众号");
}else if(list.get(j).getRegSource().equals("8")){
userInvestExcelByDate.setRegSource("红包");
}else if(list.get(j).getRegSource().equals("9")){
userInvestExcelByDate.setRegSource("转盘");
}else if(list.get(j).getRegSource().equals("77")) {
userInvestExcelByDate.setRegSource("微信");
}else{
userInvestExcelByDate.setRegSource("未知");
}
}
userInvestExcelByDate.setRegTime(list.get(j).getRegTime());
userInvestExcelByDate.setAuthTime(list.get(j).getAuthTime());
userInvestExcelByDate.setChannel(list.get(j).getChannel());
userInvestExcelByDate.setResultName(list.get(j).getResultName());
userInvestExcelByDate.setYqrName(list.get(j).getYqrName());
userExcelList.add(userInvestExcelByDate);
}
// 遍历集合数据,产生数据行
XSSFRow rowTemp = null;
XSSFCell cellTemp = null;
for(int p = 0;p < userExcelList.size();p++){
UserInvestExcel require = userExcelList.get(p);
rowTemp = sheet.createRow(p+1);
//产生数据
int count = 0;
cellTemp = rowTemp.createCell(count++);
cellTemp.setCellValue(require.getUserId());
cellTemp = rowTemp.createCell(count++);
cellTemp.setCellValue(require.getLoginName());
cellTemp = rowTemp.createCell(count++);
if(require.getRealName()!=null){
cellTemp.setCellValue(require.getRealName());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getIdno()!=null){
cellTemp.setCellValue(require.getIdno());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getBoundPhone()!=null){
cellTemp.setCellValue(require.getBoundPhone());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getBankCard()!=null){
cellTemp.setCellValue(require.getBankCard());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getRegSource()!=null){
cellTemp.setCellValue(require.getRegSource());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getRegTime()!=null){
cellTemp.setCellValue(sdf.format(require.getRegTime()).toString());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getAuthTime()!=null){
cellTemp.setCellValue(sdf.format(require.getAuthTime()).toString());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getChannel()!=null){
cellTemp.setCellValue(require.getChannel());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getResultName()!=null){
cellTemp.setCellValue(require.getResultName());
}else{
cellTemp.setCellValue("");
}
cellTemp = rowTemp.createCell(count++);
if(require.getYqrName()!=null){
cellTemp.setCellValue(require.getYqrName());
}else{
cellTemp.setCellValue("");
}
}
response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName).getBytes(), "ISO-8859-1"));//设定输出文件头
response.setContentType("application/vnd.ms-excel;charset=UTF-8");// 定义输出类型
outStream = response.getOutputStream();
}
workBook.write(outStream);
outStream.close();
logger.info(MyUtils.getUser(request).getUserRename()+".................");
this.saveLog(request, "导出成功" , null);
} catch (Exception e) {
// TODO: handle exception
logger.error(MyUtils.getUser(request).getUserRename()+":::"+e.getMessage());
this.saveLog(request, "导出失败" , e.getMessage());
}
}
相关文章推荐
- phpexcel数据导出分多个工作区(sheet)
- jsp 导出xls,创建多个sheet
- NPOI导出EXCEL数据量大,分多个sheet显示数据
- SQL Server2000 数据导出Excel(自动创建有规则的SheetName)
- devexpress导出数据到excel,数据源为多个xtrareport时,多个sheet导出
- SQL大容量数据导出到Excel(多文件单SHeet)
- 关于导入导出数据中ID号变化的问题
- (转)关于MYSQL数据的导出导入与版本的转换
- 关于DBGRIDEH导出数据到CSV
- C# 如何将 不同的数据(多个查询结果集 dataset)导出到一个excel的不同sheet中
- 关于MYSQL数据的导出导入与版本的转换
- 导出DataSet数据到excel的多个sheet
- 2003下从网页中把数据导出到excel时,碰到"Automation 服务器不能创建对象"的问题
- Oracle创建用户、表空间、导入导出数据的命令举例
- 关于简单格式大容量数据导出的web实现
- 关于导出数据到Excel时,单元格数据类型的控制
- 关于从db2 导入导出数据的问题
- 一些关于从数据库导出数据到word、excel、.txt文本文件的代码
- 关于mysql数据的导出(http://blog.csdn.net/davidullua/services/trackbacks/21982.aspx )
- [疑]关于oracle导出数据时遇到的4031问题