1.项目的目录结构

2.创建一个用户类,下面会通过查询数据库把数据封装成用户实例列表

package csh.entity;

/**
* @author 悦文
* @create 2018-10-24 18:41
**/
public class Order {
private int id;
private String name;
private int status;
private String updatetime; public Order(int id, String name, int status, String updatetime) {
this.id = id;
this.name = name;
this.status = status;
this.updatetime = updatetime;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getStatus() {
return status;
} public void setStatus(int status) {
this.status = status;
} public String getUpdatetime() {
return updatetime;
} public void setUpdatetime(String updatetime) {
this.updatetime = updatetime;
}
}

3.ExcelUtil.java文件,创建Excel基础类

package jdbc.dao;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.HorizontalAlignment; /**
* 创建Excel基础类
*
* @author 悦文
* @create 2018-11-15 10:07
**/
public class ExcelUtil {
public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook wb) { // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
if (wb == null) {
wb = new HSSFWorkbook();
} // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName); // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
HSSFRow row = sheet.createRow(0); // 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式 //声明列对象
HSSFCell cell = null; //创建标题
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
} //创建内容
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]);
}
}
return wb;
}
}
4.查询数据库得到导出的数据
public static List<Order> getOrderByDate(String start, String end, int currentpage, int maximum) throws SQLException {
//int id = -1;
try {
//HH:mm:ss:SSS
//currentpage=currentpage-1;
//分页起始点
int maximumstart = maximum * (currentpage - 1);
Long startstamp = Timestamp.dateToStamp(start + ":000");
Long endstamp = Timestamp.dateToStamp(end + ":000");
Connection conn = Dao.getConnection();
//select * from order_user WHERE update_time BETWEEN 1541001600000 AND 1543507200000 GROUP BY update_time DESC limit 0,2 ;
PreparedStatement ps = (PreparedStatement) conn
.prepareStatement("select * from order_user WHERE update_time BETWEEN ? AND ? GROUP BY id DESC limit " + maximumstart + "," + maximum);
ps.setLong(1, startstamp);
ps.setLong(2, endstamp);
// ps.setInt(3, Integer.parseInt(contrller));
// ps.setString(1, name);
ResultSet rs = ps.executeQuery();
List<Order> orderlist = new ArrayList();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int status = rs.getInt("status");
long updatetime = rs.getLong("update_time");
String updatetimes = String.valueOf(updatetime);
Order order = new Order(id, name, status, Timestamp.stampToDate(updatetimes));
orderlist.add(order);
}
Dao.close(rs, ps, conn);
return orderlist;
} catch (SQLException e) {
e.printStackTrace();
return null;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}

5.ExportExcelServlet.java,创建Excel响应流
package com.csh.servlet;

import csh.entity.Order;
import jdbc.dao.ExcelUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import search.SearchDao; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map; /**
* Created by admin on 2018/11/16.
*/
@WebServlet(name = "ExportExcelServlet")
public class ExportExcelServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String start = "";
String end = "";
String contrller = "";
String uri = request.getRequestURL() + (request.getQueryString() != null ? "?" + request.getQueryString() : "");
System.out.println(uri);
Map<String, String[]> querymap = request.getParameterMap(); //判断不为空
for (String key : querymap.keySet()) {
String t = querymap.get(key)[0];
if (key.equals("startdate")) {
if (!t.equals("")) {
start = querymap.get(key)[0];
}
} else if (key.equals("startend")) {
if (!t.equals("")) {
end = querymap.get(key)[0];
} } else if (key.equals("contrller")) {
if (!t.equals("")) {
contrller = querymap.get(key)[0];
}
}
} if (start.equals("") || end.equals("") || start.equals("null") || end.equals("null")) {
//判断时间为空且状态为空
if (contrller.equals("") || contrller.equals("null")) {
try {
export(request, response,SearchDao.getAll());
} catch (Exception e) {
e.printStackTrace();
}
//判断时间为空但是状态不为空
} else {
try {
export(request, response,SearchDao.exportOrderByStatus(contrller));
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
//判断时间不为空且状态不为空
if (!contrller.equals("") && !contrller.equals("null")) {
try {
export(request, response,SearchDao.exportOrderByDateAndContrller(start, end, contrller));
} catch (Exception e) {
e.printStackTrace();
}
} else {
//判断时间不为空,状态为空
try {
export(request, response,SearchDao.exportOrderByDate(start, end));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} public void export(HttpServletRequest request, HttpServletResponse response,List<Order> order) throws Exception {
//获取数据
List<Order> list = order; //excel标题
String[] title = {"ID", "name", "status", "update_time", "comment"}; //excel文件名
String fileName = "订餐统计表" + System.currentTimeMillis() + ".xls"; //sheet名
String sheetName = "订餐统计"; String[][] content=new String[list.size()][title.length];
for (int i = 0; i < list.size(); i++) {
content[i] = new String[title.length];
Order obj = list.get(i);
content[i][0] = String.valueOf(obj.getId());
content[i][1] = obj.getName();
if(obj.getStatus()==1){
content[i][2] = "加班已订餐";
}else if(obj.getStatus()==2){
content[i][2] = "加班未订餐";
}
//content[i][2] = String.valueOf(obj.getStatus());
content[i][3] = obj.getUpdatetime();
//content[i][4] = obj.get("comment").tostring();
}

//------------------------以下是向excel中导入查询的数据----------------------
//创建HSSFWorkbook
HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, content, null); //响应到客户端
try {
this.setResponseHeader(response, fileName);
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
} //发送响应流方法
public void setResponseHeader(HttpServletResponse response, String fileName) {
try {
try {
fileName = new String(fileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=ISO8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

 
6.请求页面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta charset="UTF-8">
<title>欢迎页面-X-admin2.0</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport"
content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
<link rel="stylesheet" href="./css/font.css">
<link rel="stylesheet" href="./css/xadmin.css">
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="./lib/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="./js/xadmin.js"></script>
<!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head> <body>
<xblock>
<button class="layui-btn layui-btn-danger" onclick="exporExcel()">导出Excel</button>
</xblock> <script>
function exporExcel() {
var obj = document.getElementById("contrller"); //定位id
var index = obj.selectedIndex; // 选中索引
//var text = obj.options[index].text; // 选中文本
var contrller = obj.options[index].value; // 选中值
var startdate = document.getElementById("start").value;
var startend = document.getElementById("end").value; window.location.href = "/javawebservlet/ExportExcelServlet?startdate="+startdate+"&"+"startend="+startend+"&"+"contrller="+contrller;
}
</script> </body> </html>

jsp+servlet 导出Excel表格的更多相关文章

  1. 利用Servlet导出Excel

    -----因为Excel可以打开HTML文件,因此可以利用页面的Form表单把页面中的table内容提交给Servlet,然后后台把提交上来的table内容转换成文件流的形式,并以下载的形式转给客户端 ...

  2. java导出excel表格

    java导出excel表格: 1.导入jar包 <dependency> <groupId>org.apache.poi</groupId> <artifac ...

  3. Spring Boot 导出Excel表格

    Spring Boot 导出Excel表格 添加支持 <!--添加导入/出表格依赖--> <dependency> <groupId>org.apache.poi& ...

  4. 使用poi导出Excel表格,jar包冲突

    HTTP Status 500 – Internal Server Error Type Exception Report Message Handler processing failed; nes ...

  5. java 实现用户自由选择字段实现导出EXCEL表格

    package com.thinkgem.jeesite.common.utils.excel; import java.io.File; import java.io.OutputStream; i ...

  6. PHP导入导出excel表格图片(转)

    写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了.呵呵.(COM方式不讲了,这种可读的太多了,我也写过利用wp ...

  7. java中使用jxl导出Excel表格详细通用步骤

    该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ...

  8. .NET环境下导出Excel表格的两种方式和导入两种类型的Excel表格

    一.导出Excel表格的两种方式,其中两种方式指的是导出XML数据类型的Excel(即保存的时候可以只需要修改扩展名为.xls)和真正的Excel这两种. using System; using Sy ...

  9. 使用NPOI将数据库里信息导出Excel表格并提示用户下载

    使用NPOI进行导出Excel表格大家基本都会,我在网上却很少找到导出Excel表格并提示下载的 简单的代码如下 //mvc项目可以传多个id以逗号相隔的字符串 public ActionResult ...

随机推荐

  1. 洛谷 P3078 [USACO13MAR]扑克牌型Poker Hands

    P3078 [USACO13MAR]扑克牌型Poker Hands 题目描述 Bessie and her friends are playing a unique version of poker ...

  2. 洛谷 P1796 汤姆斯的天堂梦_NOI导刊2010提高(05)

    P1796 汤姆斯的天堂梦_NOI导刊2010提高(05) 题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的 ...

  3. RDS for MySQL Online DDL 使用

    https://help.aliyun.com/knowledge_detail/41733.html?spm=5176.7841698.2.17.u67H3h

  4. data object audit

    客户提出了一个需求.想对一个表做audit. 本来这是非常简单的一个case,因为oracle自带的 audit功能就可以非常方便的实现.  实现的方式如下: BEGIN DBMS_FGA.ADD_P ...

  5. 【转】storm 开发系列一 第一个程序

    原文: http://blog.csdn.net/csfreebird/article/details/49104777 --------------------------------------- ...

  6. [Mini Program] 尺寸单位 rpx

    So each phone's width is 750rpx. And according to the device ratio (width:height), we can calucalate ...

  7. 配置Java连接池的两种方式:tomcat方式以及spring方式

    1. tomcat方式:在context.xml配置连接池,然后在web.xml中写配置代码(也能够在server.xml文件里配置连接池).这两种方法的差别是:在tomcat6版本号及以上中cont ...

  8. C# 验证数字的正则表达式集

    验证数字的正则表达式集 博客分类: 正则 正则表达式 验证数字的正则表达式集 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d ...

  9. PCB MS SQL表值函数与CLR 表值函数 (例:字符串分割转表)

    将字符串分割为表表经常用到,这里 SQL表值函数与CLR  表值函数,两种实现方法例出来如下: SELECT * FROM FP_EMSDB_PUB.dbo.SqlSplit('/','1oz/1.5 ...

  10. [Apple开发者帐户帮助]三、创建证书(5)创建WatchKit服务证书

    WatchKit服务证书允许您使用Apple推送通知(APN)将更新推送到Apple Watch上的复杂功能. 所需角色:帐户持有人或管理员. 在证书,标识符和配置文件中,从左侧的弹出菜单中选择iOS ...