导出市场活动:
1)给"批量导出"按钮添加单击事件,发送导出请求
2)查询所有的市场活动
3)创建一个excel文件,并且把市场活动写到excel文件中
4)把生成的excel文件输出到浏览器(文件下载)
技术准备:
1)使用java生成excel文件:
图形化API(这种比较复杂,学起来费时间还不常用,没有必要)
---> iText,apache-poi
关于办公文档插件使用的基本思想:把办公文档的所有元素封装成普通的Java类,
程序员通过操作这些类达到操作办公文档目的。
文件---------HSSFWorkbook
页-----------HSSFSheet
行-----------HSSFRow
列-----------HSSFCell
样式---------HSSFCellStyle
使用apache-poi生成excel:
a)添加依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
b)使用封装类生成excel文件:
测试代码:
2)文件下载:
filedownloadtest.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<script type="text/javascript" src="jquery/jquery-1.11.1-min.js"></script>
<title>演示文件下载</title>
<script type="text/javascript">
$(function () {
//给"下载"按钮添加单击事件
$("#fileDownloadBtn").click(function () {
//发送文件下载的请求
window.location.href="workbench/activity/fileDownload.do";
});
});
</script>
</head>
<body>
<input type="button" value="下载" id="fileDownloadBtn">
</body>
</html>
这个jsp页面就只有一个按钮下载
所有文件下载的请求只能发送同步请求。
因为是同步请求所以 window.location.href="workbench/activity/fileDownload.do";
这里还可以回顾一下同步请求的三种方式是什么,好像还有表单和a
标签.
ActivityController
|->fileDownload()
@RequestMapping("/workbench/activity/fileDownload.do")
public void fileDownload(HttpServletResponse response) throws Exception{
//1.设置响应类型
response.setContentType("application/octet-stream;charset=UTF-8");
//2.获取输出流
OutputStream out=response.getOutputStream();
//浏览器接收到响应信息之后,默认情况下,直接在显示窗口中打开响应信息;即使打不开,也会调用应用程序打开;只有实在打不开,才会激活文件下载窗口。
//可以设置响应头信息,使浏览器接收到响应信息之后,直接激活文件下载窗口,即使能打开也不打开
response.addHeader("Content-Disposition","attachment;filename=mystudentList.xls");
//读取excel文件(InputStream),把输出到浏览器(OutoutStream)
InputStream is=new FileInputStream("D:\\course\\18-CRM\\阶段资料\\serverDir\\studentList.xls");
byte[] buff=new byte[256];
int len=0;
while((len=is.read(buff))!=-1){
out.write(buff,0,len);
}
//关闭资源
is.close();
out.flush();
}
上面这种一般也用不到.下面的代码是从数据库查询数据然后插入到excel
表然后浏览器下载
@RequestMapping("/workbench/activity/exportAllActivitys.do")
public void exportAllActivitys(HttpServletResponse response) throws Exception{
//调用service层方法,查询所有的市场活动
List<Activity> activityList=activityService.queryAllActivitys();
//创建exel文件,并且把activityList写入到excel文件中
HSSFWorkbook wb=new HSSFWorkbook();
HSSFSheet sheet=wb.createSheet("市场活动列表");
HSSFRow row=sheet.createRow(0);
HSSFCell cell=row.createCell(0);
cell.setCellValue("ID");
cell=row.createCell(1);
cell.setCellValue("所有者");
cell=row.createCell(2);
cell.setCellValue("名称");
cell=row.createCell(3);
cell.setCellValue("开始日期");
cell=row.createCell(4);
cell.setCellValue("结束日期");
cell=row.createCell(5);
cell.setCellValue("成本");
cell=row.createCell(6);
cell.setCellValue("描述");
cell=row.createCell(7);
cell.setCellValue("创建时间");
cell=row.createCell(8);
cell.setCellValue("创建者");
cell=row.createCell(9);
cell.setCellValue("修改时间");
cell=row.createCell(10);
cell.setCellValue("修改者");
//遍历activityList,创建HSSFRow对象,生成所有的数据行
if(activityList!=null && activityList.size()>0){
Activity activity=null;
for(int i=0;i<activityList.size();i++){
activity=activityList.get(i);
//每遍历出一个activity,生成一行
row=sheet.createRow(i+1);
//每一行创建11列,每一列的数据从activity中获取
cell=row.createCell(0);
cell.setCellValue(activity.getId());
cell=row.createCell(1);
cell.setCellValue(activity.getOwner());
cell=row.createCell(2);
cell.setCellValue(activity.getName());
cell=row.createCell(3);
cell.setCellValue(activity.getStartDate());
cell=row.createCell(4);
cell.setCellValue(activity.getEndDate());
cell=row.createCell(5);
cell.setCellValue(activity.getCost());
cell=row.createCell(6);
cell.setCellValue(activity.getDescription());
cell=row.createCell(7);
cell.setCellValue(activity.getCreateTime());
cell=row.createCell(8);
cell.setCellValue(activity.getCreateBy());
cell=row.createCell(9);
cell.setCellValue(activity.getEditTime());
cell=row.createCell(10);
cell.setCellValue(activity.getEditBy());
}
}
//根据wb对象生成excel文件
/* OutputStream os=new FileOutputStream("D:\\course\\18-CRM\\阶段资料\\serverDir\\activityList.xls");
wb.write(os);*/
//关闭资源
/*os.close();
wb.close();*/
//把生成的excel文件下载到客户端
response.setContentType("application/octet-stream;charset=UTF-8");
response.addHeader("Content-Disposition","attachment;filename=activityList.xls");
OutputStream out=response.getOutputStream();
/*InputStream is=new FileInputStream("D:\\course\\18-CRM\\阶段资料\\serverDir\\activityList.xls");
byte[] buff=new byte[256];
int len=0;
while((len=is.read(buff))!=-1){
out.write(buff,0,len);
}
is.close();*/
wb.write(out);
wb.close();
out.flush();
}
标签:文件,插件,excel,Excel,cell,createCell,poi,setCellValue,row
From: https://www.cnblogs.com/javaxubo/p/16883872.html