jsp导出Excel功能的实现
借助POI的excel接口,可以方便得实现excel导出功能:
首先需要引入poi对应的jar包
1.前端jsp页面需要一个a链接。
web页面文件MIM类型的下载,只需要一个a元素,该a可以链到该文件在服务器端的实体路径,也可以链接到一个servelt,将该文件写到response的输出流中。其他的下载浏览器会自动帮助完成。
<a type="button" class="btn btn-warning" href='/WebTest/ExportExcel' id='export'>导出</a>
2,该链接对应的后台处理servlet代码实现
package com.bobo.servlet; import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.bobo.helper.ExcelHelper;
import com.bobo.modal.ShitiModal;
import com.bobo.modal.XixiangModal; public class ExportExcel extends HttpServlet { /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { process(request, response);
} /**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to
* post.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { process(request, response);
} @SuppressWarnings("deprecation")
private void process(HttpServletRequest request,
HttpServletResponse response) throws UnsupportedEncodingException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); response.reset();
response.setContentType("application/x-msexcel"); String fileName = URLEncoder.encode("巡查实体列表", "utf-8");
response.addHeader("Content-Disposition", "attachment; filename="
+ new String(fileName.getBytes("utf-8"), "ISO8859-1") + ".xls");
HSSFWorkbook wb = new HSSFWorkbook();
// 表头数足
String[] title = { "实体编号", "实体名称", "省", "市", "巡查人", "巡查结果", "巡查时间",
"细项名称", "巡查人", "巡查结果", "巡查时间", "不合格原因" };
ArrayList<ShitiModal> content = new ArrayList<ShitiModal>();
for (int i = ; i < ; i++) {
ShitiModal shiti = new ShitiModal();
shiti.setShitiCity("杭州");
shiti.setShitiName("二龙路基站");
shiti.setShitiNum("");
shiti.setShitiPerson("张三");
shiti.setShitiProvince("浙江");
shiti.setShitiResult("不合格");
shiti.setShitiTime("2015年4月28日");
// 填充细分项
ArrayList<XixiangModal> xixiangList = new ArrayList<XixiangModal>();
for (int j = ; j < ; j++) {
XixiangModal xixiang = new XixiangModal();
xixiang.setXixiangMember("张三");
xixiang.setXixiangName("开关电源");
xixiang.setXixiangReason("管道线路井内余线没有靠墙");
xixiang.setXixiangResult("不合格");
xixiang.setXixiangTime("2015年4月28日");
xixiangList.add(xixiang);
}
shiti.setXixiangList(xixiangList);
content.add(shiti);
}
ExcelHelper eHelper = new ExcelHelper();
// 生成excel中的一张表格
HSSFSheet sheet = eHelper.export(wb, "sheet1", title, content); // 直接存到服务器端
// FileOutputStream fileOut;
// try {
// fileOut = new FileOutputStream("workbook.xls");
// wb.write(fileOut);
// fileOut.close();
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// 写入输出流
try {
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close(); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
3,相关实体类
package com.bobo.modal; import java.util.ArrayList; public class ShitiModal {
private String shitiNum;
private String shitiName;
private String shitiProvince;
private String shitiCity;
private String shitiPerson;
private String shitiTime;
private String shitiResult;
private ArrayList<XixiangModal> xixiangList;
public String getShitiPerson() {
return shitiPerson;
} public void setShitiPerson(String shitiPerson) {
this.shitiPerson = shitiPerson;
} public String getShitiTime() {
return shitiTime;
} public void setShitiTime(String shitiTime) {
this.shitiTime = shitiTime;
} public String getShitiResult() {
return shitiResult;
} public void setShitiResult(String shitiResult) {
this.shitiResult = shitiResult;
} public String getShitiNum() {
return shitiNum;
} public void setShitiNum(String shitiNum) {
this.shitiNum = shitiNum;
} public String getShitiName() {
return shitiName;
} public void setShitiName(String shitiName) {
this.shitiName = shitiName;
} public String getShitiProvince() {
return shitiProvince;
} public void setShitiProvince(String shitiProvince) {
this.shitiProvince = shitiProvince;
} public String getShitiCity() {
return shitiCity;
} public void setShitiCity(String shitiCity) {
this.shitiCity = shitiCity;
} public ArrayList<XixiangModal> getXixiangList() {
return xixiangList;
} public void setXixiangList(ArrayList<XixiangModal> xixiangList) {
this.xixiangList = xixiangList;
} }
ShitiModal
package com.bobo.modal; public class XixiangModal {
private String XixiangName;
private String XixiangMember;
private String XixiangResult;
private String XixiangTime;
private String XixiangReason;
public String getXixiangName() {
return XixiangName;
}
public void setXixiangName(String xixiangName) {
XixiangName = xixiangName;
}
public String getXixiangMember() {
return XixiangMember;
}
public void setXixiangMember(String xixiangMember) {
XixiangMember = xixiangMember;
}
public String getXixiangResult() {
return XixiangResult;
}
public void setXixiangResult(String xixiangResult) {
XixiangResult = xixiangResult;
}
public String getXixiangTime() {
return XixiangTime;
}
public void setXixiangTime(String xixiangTime) {
XixiangTime = xixiangTime;
}
public String getXixiangReason() {
return XixiangReason;
}
public void setXixiangReason(String xixiangReason) {
XixiangReason = xixiangReason;
} }
XixiangModal
4,ExcelHelper类
package com.bobo.helper; import java.util.ArrayList; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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 org.apache.poi.ss.util.CellRangeAddress; import com.bobo.modal.ShitiModal;
import com.bobo.modal.XixiangModal; public class ExcelHelper { public HSSFSheet export(HSSFWorkbook wb, String fileName, String[] title,
ArrayList<ShitiModal> content) {
// int cellNum = 5; //设置列数
/**
* 建立表格设置。
*/
HSSFSheet sheet = null;
try {
sheet = wb.createSheet(fileName); int columnSize = title.length;
HSSFRow row_one = sheet.createRow();
for (int i = ; i < columnSize; i++) {
HSSFCell cell = row_one.createCell(i);
cell.setCellValue(title[i]);
}
int curRow = ;
int endRow = ;
int temp = curRow;
for (int i = ; i < content.size(); i++) {
temp = curRow;
ShitiModal shiti = content.get(i);
int xixiangNum = content.get(i).getXixiangList().size();
endRow += xixiangNum;
for (; curRow < endRow; curRow++) {
// 设置需要合并的单元格部分
for (int k = ; k < ; k++) {
CellRangeAddress cra = new CellRangeAddress(curRow,
endRow - , k, k);
sheet.addMergedRegion(cra);
}
HSSFRow row = sheet.createRow(curRow);
if (curRow == temp) {
row.createCell().setCellValue(shiti.getShitiNum());
row.createCell().setCellValue(shiti.getShitiName());
row.createCell()
.setCellValue(shiti.getShitiProvince());
row.createCell().setCellValue(shiti.getShitiCity());
row.createCell().setCellValue(shiti.getShitiPerson());
row.createCell().setCellValue(shiti.getShitiResult());
row.createCell().setCellValue(shiti.getShitiTime());
}
// 开始添加细分
XixiangModal xixiang = shiti.getXixiangList().get(
curRow - temp);
row.createCell().setCellValue(xixiang.getXixiangName());
row.createCell().setCellValue(xixiang.getXixiangMember());
row.createCell().setCellValue(xixiang.getXixiangResult());
row.createCell().setCellValue(xixiang.getXixiangTime());
row.createCell().setCellValue(xixiang.getXixiangReason()); }
curRow = endRow;
} } catch (Exception ex) {
ex.printStackTrace();
}
return sheet;
} // end of export }
jsp导出Excel功能的实现的更多相关文章
- java、jsp导出excel功能备份
问题踩坑: ajax请求不能下载文件 必须这样: <a href="/media">点击下载Excel</a> 或者 location.href = '/m ...
- JSP导出Excel后身份证后三位为0
JSP导出Excel身份证号码超出Excel最大限制,用科学计数法表示,但后三位为0,修改方式: <style type="text/css">.txt { ...
- Atitit.导出excel功能的设计 与解决方案
Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...
- 项目笔记:导出Excel功能
1.前台这块: var ids=""; $.post("${basePath}/assets/unRegDeviceAction_getDeviceIds.do" ...
- 项目笔记:导出Excel功能分sheet页插入数据
导出Excel功能分sheet页处理数据: /*导出EXCEL*/ public void createExcel() { log.info("导出Excel功能已经启动-BEGIN&quo ...
- vue项目导出EXCEL功能
因为一些原因导出EXCEL功能必须前端来做,所以就研究了一下,在网上也找了一些文章来看,有一些不完整,我做完了就记录下来,供大家参考: 1.首先先安装依赖: npm install file-save ...
- Vue通过Blob对象实现导出Excel功能
不同的项目有不同的导出需求,有些只导出当前所显示结果页面的表格进入excel,这个时候就有很多插件,比如vue-json-excel或者是Blob.js+Export2Excel.js来实现导出Exc ...
- jsp导出excel
很多时候,我们都知道在java项目里面采用poi来导出excel很方便,但是如果你的项目采用的是jsp你可以用更简单的方法来导出.首先你要在顶部引入:<jsp:directive.page im ...
- dataTables的导出Excel功能
Datatables它是一款基于jQuery表格插件,钟情于它操作dom的灵活.做后台的同学想必使用它能事半功倍,而且交互强.容易扩展. 我也是最近要做公司后台界面,表格涉及的很多,所以考虑使用DT, ...
随机推荐
- 动态input file多文件上传到后台没反应的解决方法!!!
其实我也不太清除具体是什么原因,但是后面就可以了!!! 我用的是springMVC 自带的文件上传 1.首先肯定是要有springMVC上传文件的相关配置! 2.前端 这是动态input file上传 ...
- 查找文件是否安装以及安装路径(Ubuntu 下 )
参考:<linux下如何查看某个软件 是否安装??? 安装路径在哪???> 原文: 如果你使用rpm -ivh matlab装的, 用rpm -qa | grep matlab肯定是能够找 ...
- RT-Thread信号量的基本操作
抽象的来讲,信号量的特性如下:信号量是一个非负整数(车位数),所有通过它的线程/进程(车辆)都会将该整数减一(通过它当然是为了使用资源),当该整数值为 0 时,所有试图通过它的线程都将处于等待状态.在 ...
- 挑战python
00 热身 http://www.pythonchallenge.com/pc/def/0.html import math print math.pow(2,38); # 274877906944 ...
- 20145235 《Java程序设计》第6周学习总结
教材学习内容总结 10.1 InputStream与OutputStream 串流设计的概念 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象. 从应用程序角度来看,如果要将 ...
- github中non-fast-forward错误的解决
参考文献 1.http://www.linuxidc.com/Linux/2012-04/58985.htm 2.http://ihower.tw/blog/archives/2620 3.http: ...
- Introduction to Structured Data
https://developers.google.com/search/docs/guides/intro-structured-data Structured data refers to kin ...
- 特征向量-Eigenvalues_and_eigenvectors#Graphs
https://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors#Graphs A {\displaystyle A} ...
- 删除下标为n的数组值
Array.prototype.del=function(n) { //n表示第几项,从0开始算起.//prototype为对象原型,注意这里为对象增加自定义方法的方法. if(n<0) //如 ...
- Windows 一键安装OpenSSL
原理:OpenSSL在github上有开源项目,我们只需要把代码克隆到本地,在本地编译一下就好了 注意事项: 1->在github上获取源码,必须要安装git for windows,网址 ht ...