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. pg 学习资料

    文/谭峰 DBA,PostgreSQL专家 开源数据库 PostgreSQL 中文资料非常缺乏,很多社区朋友苦于上手的中文资料少,因此汇总收集以下 PostgreSQL 中文资料,包括 Postgre ...

  2. tomcat理解

  3. [React Testing] Confidently Ship Production React Apps

    We want to make sure that when we ship new code, our users can use the application. The best way we' ...

  4. vim copy termi

    用vim写代码时,经常遇到这样的场景,复制多行,然后粘贴. 这样做:1. 将光标移动到要复制的文本开始的地方,按v进入可视模式.2. 将光标移动到要复制的文本的结束的地方,按y复制.此时vim会自动将 ...

  5. hdoj--5233--Gunner II(map+queue&&二分)

     Gunner II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  6. B1024 生日快乐 递归。。。

    bzoj1024叫生日快乐,其实很简单,但是没看出来就很尴尬... Description windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕.现在包括win ...

  7. word2vec改进之Hierarchical Softmax

    首先Hierarchical Softmax是word2vec的一种改进方式,因为传统的word2vec需要巨大的计算量,所以该方法主要有两个改进点: 1. 对于从输入层到隐藏层的映射,没有采取神经网 ...

  8. Cracking the Coding Interview 8.5

    Implement an algorithm to print all valid combinations of n-pairs of parentheses #include<stdio.h ...

  9. Apache 虚拟主机 配置方法

    打开httpd.conf文件 去掉LoadModule vhost_alias_module modules/mod_vhost_alias.so前面的#号 去掉Include conf/extra/ ...

  10. Spring Boot (16) logback和access日志

    Spring Boot 内部采用的是Commons Logging进行日志记录,但是在底层为Java Util Logging.Log4J2.Logback等日志框架提供了默认配置. logback ...