ExportExcel.java类
package com.pro.lottery.action; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import com.pro.lottery.dao.DataSourceFactory; import com.pro.lottery.modle.ReqLottery; /** * * @author Caixu * */ public class ExportExcel extends BaseAction { /** * */ private static final long serialVersionUID = -3297347144890990614L; public static double totalCount = 0; //总共有多少条数据 public static double execCount = 0; //已经处理的数据 /** * 对list数据源将其里面的数据导入到excel表单 * * @param fieldName * [] 导出到excel文件里的表头名 * @param columnIt * [] 导出到excel文件里的表头NAME * @param sheetName * 工作表的名称 * @param sheetSize * 每个sheet中数据的行数,此数值必须小于65536 * @param output * java输出流 */ public static boolean exportExcel(List<?> list, String[] fieldName, Object[] columnIt, String sheetName, int sheetSize, OutputStream output) { HSSFWorkbook workbook = new HSSFWorkbook();// 产生工作薄对象 if (sheetSize >= 65536) { sheetSize = 65536; } double sheetNo = Math.ceil(list.size() / sheetSize); for (int index = 0; index <= sheetNo; index++) { HSSFSheet sheet = workbook.createSheet();// 产生工作表对象 workbook.setSheetName(index, sheetName+index);//设置工作表的名称. HSSFRow row = sheet.createRow(0);// 产生一行 HSSFCell cell;// 产生单元格 //表头样式 HSSFCellStyle headerStyle = (HSSFCellStyle) workbook .createCellStyle();// 创建标题样式 headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //设置垂直居中 headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置水平居中 HSSFFont headerFont = (HSSFFont) workbook.createFont(); //创建字体样式 headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗 headerFont.setFontName("Times New Roman"); //设置字体类型 headerFont.setFontHeightInPoints((short) 10); //设置字体大小 headerStyle.setFont(headerFont); //为标题样式设置字体样式 headerStyle.setFillBackgroundColor((short) 2); headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框 headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框 headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框 headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框 headerStyle.setWrapText(true); // 设置为自动换行 headerStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);// 设置背景色 headerStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);// 设置前景色 headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //表body样式 HSSFCellStyle cellStyle = (HSSFCellStyle) workbook .createCellStyle(); cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //设置垂直居中 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置水平居中 cellStyle.setWrapText(true); // 设置为自动换行 // 写入各个字段的名称 for (int i = 0; i < fieldName.length; i++) { cell = row.createCell(i); // 创建第一行各个字段名称的单元格 row.setHeight((short) 450); cell.setCellType(HSSFCell.CELL_TYPE_STRING); // 设置单元格内容为字符串型 // cell.setEncoding(HSSFCell.ENCODING_UTF_16); // //为了能在单元格中输入中文,设置字符集为UTF_16 cell.setCellValue(fieldName[i]); // 给单元格内容赋值 cell.setCellStyle(headerStyle); } int startNo = index * sheetSize; int endNo = Math.min(startNo + sheetSize, list.size()); // 写入各条记录,每条记录对应excel表中的一行 for (int i = startNo; i < endNo; i++) { row = sheet.createRow(i + 1 - startNo); row.setHeight((short) 350); sheet.setColumnWidth(i, 4500); HashMap map = (HashMap) list.get(i); for (int j = 0; j < columnIt.length; j++) { cell = row.createCell(j); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellStyle(cellStyle); // cell.setEncoding(HSSFCell.ENCODING_UTF_16); Object value = map.get(columnIt[j]); if (value != null) { cell.setCellValue(map.get(columnIt[j]).toString()); } else cell.setCellValue(""); } execCount = execCount + 1; } } try { //为了让百分比不显示100% execCount = execCount - (totalCount * 0.02); workbook.write(output); execCount = execCount + (totalCount * 0.02); output.flush(); output.close(); return true; } catch (IOException e) { e.printStackTrace(); System.out.println("Output is closed "); System.out.println("清除了。。。。。。。。。。。"); execCount = 0; return false; } } public String exportExcelAction(){ HttpServletResponse response = this.getResponse(); HttpServletRequest request = this.getRequest(); response.setCharacterEncoding("utf-8"); String fileName = request.getParameter("fileName"); // 初始化数据 /* List<Map<Object,Object>> list = new ArrayList<Map<Object,Object>>(); for (int i = 0; i < 53333; i++) { Map<Object,Object> map = new HashMap<Object,Object>(); map.put("id", i); map.put("name", "姓名" + i); map.put("age", 20+ i); list.add(map); } */ long count = DataSourceFactory.getInstance().findCount("select count(1) from lotteryInfo where 1=1 "); List<ReqLottery> lotterInfo = DataSourceFactory.getInstance().getObjListByProcedure(ReqLottery.class, "PUBLIC_FINDVIEWPAGE_FIND", new Object[]{"lotteryInfo", "1", String.valueOf(count), "lotteryissue", "*", "0", "1", "1=1 " }); List<Map<Object,Object>> list = new ArrayList<Map<Object,Object>>(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义格式,不显示毫秒 for (ReqLottery lottery : lotterInfo) { Map<Object,Object> map = new HashMap<Object,Object>(); if(lottery.getLotteryId() == 1001){ map.put("lotteryId", "重庆时时彩"); }else{ map.put("lotteryId", "江西时时彩"); } map.put("lotteryNum", lottery.getLotteryNum()); map.put("lotteryIssue", lottery.getLotteryIssue()); String str = df.format(lottery.getLotteryDate()); map.put("lotteryDateStr", str); map.put("lotteryType1", lottery.getLotteryType1()); map.put("lotteryType2", lottery.getLotteryType2()); map.put("lotteryType3", lottery.getLotteryType3()); list.add(map); } totalCount = list.size(); String[] alias = { "彩种类型", "开奖号码", "期号", "日期", "前三", "中三", "后三" };// excel的列头 String[] names = { "lotteryId", "lotteryNum", "lotteryIssue", "lotteryDateStr", "lotteryType1", "lotteryType2", "lotteryType3" };// 数据List中的Map的key值. /* String[] alias = { "编号", "姓名", "年龄" };// excel的列头 String[] names = { "id", "name", "age"};*/ OutputStream os = null; try { os = response.getOutputStream(); //FileOutputStream out = null; // out = new FileOutputStream("C:\\Work\\e.xls"); //设置对话框 response.setHeader("Content-disposition", "attachment;filename="+ new String(fileName.getBytes("GB2312"),"ISO-8859-1")); //设置 MIME(Excel) response.setContentType("application/vnd.ms-excel"); //设置编码 response.setCharacterEncoding("UTF-8"); } catch (Exception e) { e.printStackTrace(); } exportExcel(list, alias, names, "学生信息表", 60000, os); System.out.println("成功"); return null; } /** * 得到进度条的百分比 * @return * @throws IOException */ public String getProgressVal() throws IOException{ HttpServletResponse response = this.getResponse(); HttpServletRequest request = this.getRequest(); response.setCharacterEncoding("utf-8"); PrintWriter out = getResponse().getWriter(); //第一次请求将已经处理的条数清0 System.out.println("execCount:"+execCount+" totalCount:"+totalCount); if(execCount == 0){ out.print(0.01); return null; } try { double val = (execCount / totalCount) * 100; //DecimalFormat df = new DecimalFormat("#.00"); //System.out.println("valule:"+df.format(val)); if(val >= 100){ System.out.println("val >= 100清除了。。。。。。。。。。。"); execCount = 0; } if(execCount >= totalCount){ System.out.println("execCount >= totalCount 清除了。。。。。。。。。。。"); execCount = 0; } out.print(val); return null; } catch (Exception e) { e.printStackTrace(); execCount = 0; out.print(0); return null; }finally{ out.flush(); out.close(); } } public static void main(String[] args) { // 初始化数据 List<Map<Object,Object>> list = new ArrayList<Map<Object,Object>>(); for (int i = 0; i < 65536; i++) { Map<Object,Object> map = new HashMap<Object,Object>(); map.put("id", i); map.put("name", "姓名" + i); map.put("age", 20+ i); list.add(map); } String[] alias = { "编号", "姓名", "年龄" };// excel的列头 String[] names = { "id", "name", "age" };// 数据List中的Map的key值. FileOutputStream out = null; try { out = new FileOutputStream("C:\\Work\\e.xls"); } catch (FileNotFoundException e) { e.printStackTrace(); } exportExcel(list, alias, names, "学生信息表", 60000, out); System.out.println("----执行完毕----------"); } }
jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="/Lottery/easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="/Lottery/easyui/themes/icon.css"> <style type="text/css"> * { font-size: 12px; a { text-decoration: none; } body { margin: 0px; padding: 0px; height: 100%; } #fm { margin: 0; padding: 10px 30px; } .ftitle { font-size: 14px; font-weight: bold; color: #666; padding: 5px 0; margin-bottom: 10px; border-bottom: 1px solid #ccc; } .fitem select{ width:150px; } .fitem input{ width:150px; } .fitem label { display: inline-block; width: 160px; text-align: right; } #searchbox { clear:both; padding-left:20px; padding-bottom: 5px; } </style> </head> <script type="text/javascript" src="/Lottery/js/jquery-1.6.min.js"></script> <script type="text/javascript" src="/Lottery/easyui/jquery.easyui.min.js"></script> <script type="text/javascript" src="/Lottery/easyui/locale/easyui-lang-zh_CN.js"></script> <script type="text/javascript" src="/Lottery/js/My97DatePicker/calendar.js"></script> <script type="text/javascript" src="/Lottery/js/My97DatePicker/WdatePicker.js"></script> <script type="text/javascript" src="/Lottery/js/mask.js"></script> <script type="text/javascript"> $(function(){ $('#datagrid').datagrid({ url : '<%=path%>/lottery/viewLottery_findLotteryInfo.action', title:'开奖信息',//表格标题 iconCls:'icon-search',//表格图标 nowrap: false,//是否只显示一行,即文本过多是否省略部分。 striped: true, sortName: 'createTime', sortOrder: 'desc', idField:'terminalID', loadMsg:'拼命加载中 请稍后...', fitColumns:true, fit:true, pagination:true, //包含分页 toolbar : '#tab-tools',//工具栏 frozenColumns : [[ {checkbox:true}, { field : 'lotteryId', title : '彩种类型', width : 150, align : 'center', formatter:function(v,d,i){ switch (parseInt(v)) { case 1001: return '重庆时时彩'; case 1002: return '江西时时彩'; default: return '未定义'; } } }, { field : 'lotteryIssue', title : '期号', width : 150, align : 'center' }, { field : 'lotteryNum', title : '开奖号码', width : 120, align : 'center' } ]], columns : [[ { field : 'lotteryDateStr', title : '开奖时间', width : 150, align : 'center' }, { field : 'lotteryType1', title : '前三形态', width : 100, align : 'center' }, { field : 'lotteryType2', title : '中三形态', width : 100, align : 'center' }, { field : 'lotteryType3', title : '后三形态', width : 100, align : 'center' } ]],//单选 onCheck:function(rowIndex,row){ //if(row.auditState == 1002){ //取消选择 // $('#datagrid').datagrid('unselectRow',rowIndex).datagrid('uncheckRow',rowIndex); //} }, onClickRow:function(rowIndex,row){ //if(row.auditState == 1002){ //取消选择 // $('#datagrid').datagrid('unselectRow',rowIndex).datagrid('uncheckRow',rowIndex); //} }, //全选 onCheckAll:function(rows){ //判断能不能选中 //for(var i=0;i<rows.length;i++){ //var row = rows[i]; //if(row.auditState == 1002){ //取消选择 // var rowIndex = $('#datagrid').datagrid('getRowIndex',row); // $('#datagrid').datagrid('unselectRow',rowIndex).datagrid('uncheckRow',rowIndex); //} //} }, pagination:true, //包含分页 pageList: [10,20,30,50],//可以设置每页记录条数的列表 rownumbers:true, singleSelect:false, toolbar:[ { text:'添加开奖信息', iconCls:'icon-add', handler:function(){ $('#dlg').dialog('open').dialog('setTitle','添加收货地址'); $('#fm').form('clear'); submitType="add"; } },'-', { text:'修改开奖信息', iconCls:'icon-edit', handler:function(){ var row = $('#datagrid').datagrid('getSelected'); if (row){ submitType="update"; $('#dlg').dialog('open').dialog('setTitle','修改收货地址'); $('#fm').form('load',row); }else{ $.messager.alert('提示信息','请选选择一个进行修改!','info'); } } } ],onLoadSuccess:function(data){ if(data.result == "error"){ $.messager.show({title:'提示信息',msg:data.errorMsg,timeout:3000}); } },onLoadError:function(data){ $.messager.alert('提示信息','请求服务器失败!'); } }); $('#datagrid').datagrid('getPager').pagination({ pageSize: 10,//每页显示的记录条数,默认为10 pageList: [10,20,30,50],//可以设置每页记录条数的列表 beforePageText: '第',//页数文本框前显示的汉字 afterPageText: '页 共 {pages} 页', displayMsg: '当前显示 {from} - {to} 条记录 共 {total} 条记录' }); $(".datagrid-toolbar").append($("#searchbox")); $(".search_btn").click(function(){ $('#datagrid').datagrid('load',{ lotteryId: $("#lotteryId").val(), lotterydate: $("#lotterydate").val(), lotteryIssue:$("#lotteryIssue").val() }); }); //导出报表 var clearInterval; $(".print_btn").click(function(){ window.location.href="<%=path%>/lottery/expExcel_exportExcelAction.action?fileName=Student.xls"; $('#p').progressbar('setValue', 0); $(document).mask('正在导出报表...'); $('#p').css({"display":"block"}); //value += Math.floor(Math.random() * 10); //$('#p').progressbar('setValue', value); clearInterval = setInterval(reqProgressVal, 200); }) }); //得到进度条百分 function reqProgressVal(){ var value = $('#p').progressbar('getValue'); if(value == 100){ clearInterval(clearInterval); $(document).unmask(); $('#p').css({"display":"none"}); return; } $.ajax({ type : "post", // 以post方式与后台沟通 url : '<%=path%>/lottery/expExcel_getProgressVal.action', dataType : "json", async : false, data: {}, success : function(data) { $('#p').progressbar('setValue', data.toFixed(2)); }, error : function() { alert("请求服务器失败"); } }); } </script> <body class="ContentBody"> <!-- 进度条 --> <div id="p" class="easyui-progressbar" style="width:400px; display:none"></div> <table id="datagrid"></table> <div id="searchbox"> <form id="search_fm" method="post"> <div class="fitem"> 彩种类型:<select name="" id="lotteryId"> <option value="">==请选择==</option> <option value="1001">重庆时时彩</option> <option value="1002">江西时时彩</option> </select> 开奖时间:<input type="text" name="" id="lotterydate" readonly="readonly" size="10" onclick="WdatePicker({dateFmt:'yyyy-MM-dd'})" maxlength="10" /> 开奖期号:<input type="text" name="" id="lotteryIssue"/> <br/><br/> <a href="#" class="easyui-linkbutton search_btn" iconCls="icon-search">查询</a> <a href="#" class="easyui-linkbutton print_btn" iconCls="icon-print">导出报表</a> <!-- <input type="button" value="点我" onclick="$(document).mask('加载...').click(function(){$(document).unmask()})" /> --> </div> </form> </div> </body> </html>
效果图如下:
相关推荐
etmvc+jQuery EasyUI+POI动态导出EXCEL,非常详细,并且实用的一个小技术
总结来说,"spring mvc easyui-POI导出excel封装源码"项目是将Spring MVC的后端处理能力与EasyUI的前端展示效果以及POI的Excel处理功能相结合,实现了一个功能强大且界面美观的Excel数据导出功能。这个项目对于需要...
本文将详细介绍如何在基于EasyUI的前端框架下实现数据导出为Excel的功能。 EasyUI是一个基于jQuery的轻量级前端框架,它提供了丰富的组件和样式,帮助开发者快速构建用户界面。然而,EasyUI本身并不直接支持数据...
【基于EasyUI的通用导出】是一个功能模块,主要用于在使用EasyUI数据网格时实现数据的便捷导出。EasyUI是一个基于jQuery的UI框架,它提供了丰富的组件和样式,简化了Web开发中的界面构建工作。在这个场景下,我们...
下面将详细介绍两种有效的方法来实现EasyUI Datagrid数据导出到Excel的功能,并结合提供的文件名来推测具体实现步骤。 **方法一:使用JavaScript库(例如wxport)** 文件`wxport excel.txt`可能包含了使用wxport库...
SpringMVC+Hibernate +MySql+ EasyUI实现POI导出Excel(二) http://download.csdn.net/detail/u010651369/8170169结合开发
导出是Web应用中常见的需求,特别是在数据分析、报表展示等场景,用户可能需要将数据保存到本地以便离线查看或进一步处理。 在EasyUI中,数据导出通常与表格组件(datagrid)紧密关联,因为表格通常承载着大量的...
SSM(Spring、SpringMVC、MyBatis)框架与EasyUI的结合是Java Web开发中常见的技术栈,尤其在处理数据展示和导出时表现出高效性和灵活性。本项目通过这种方式,提供了一种将数据库中的数据导出为Excel表格的方法。 ...
本文将详细介绍如何使用EasyUI导出datagrid中的数据到Excel。 1. EasyUI DataGrid概述 EasyUI的DataGrid是一个强大的表格组件,它可以加载JSON或XML格式的数据,支持排序、分页、过滤等功能。在网页应用中,...
EasyUI的DataGrid打印导出.pdf
EasyUI的DataGrid打印导出.docx
2. MVC + easyUI + sqlserver2014 3. 主要功能有 新增、修改、删除、分页、导出Excel文件、上传图片 (例子只涉及一张表,datagrid分页默认采用sqlserver2012新增关键字分页, 如果你的数据库是2005或2008,请修改 ...
在IT行业中,开发人员经常需要处理数据导出功能,特别是在Web应用中,用户可能需要将查询结果或报表以Excel格式下载。"Easyui Spring Mvc导出Excel"是一个常见的话题,它涉及了三个关键技术:Easyui、Spring MVC以及...
EasyUI和SpringMVC是两个在Java Web开发中广泛使用的框架,它们可以结合使用来实现高效的数据导出功能。让我们详细探讨如何利用这两个工具来实现"Easyui+SpringMVC导出Excel"。 首先,EasyUI是一个基于jQuery的UI库...
easyui-datagrid导出至Excel插件,中文没有乱码问题。
在jQuery EasyUI框架中,创建的对话框(dialog)通常会自动居中显示在屏幕上,但这仅限于页面没有出现滚动条的情况。一旦页面内容超出视口,出现滚动条,dialog就会保持在原始的居中位置,导致用户需要手动滚动页面...
可以导出highcharts报表,word、pdf都可以,简单的Demo
这个“eed.rar”压缩包文件的内容似乎与使用EasyUI库来实现数据表格(datagrid)的Excel导出功能有关。下面我们将深入探讨EasyUI的datagrid导出到Excel这一主题。 首先,EasyUI的datagrid是一个非常实用的数据展示...
"EasyUI Datagrid 导出到Excel"这一主题涉及的是如何将EasyUI Datagrid中的数据显示在Excel表格中,方便用户进行数据处理和分析。以下是对这个知识点的详细说明: 1. EasyUI Datagrid简介: EasyUI Datagrid是基于...
### easyui的datagrid数据excel导出 #### 一、知识点概览 1. **EasyUI框架简介** 2. **DataGrid组件概述** 3. **DataGrid的列配置** 4. **将DataGrid转换为表格(Table)结构** 5. **导出至Excel的具体实现** 6. *...