使用Spring MVC生成Excel文档
系统
2019-08-29 22:33:59
1805 0
Spring不仅支持jsp,velocity,freemarker,同时可以将数据生成到Excel,PDF等非html文档
首先,我们编写控制器,返回逻辑名“
ListStudentUseExcel
”
package
Action;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
org.springframework.validation.BindException;
import
org.springframework.web.servlet.ModelAndView;
import
org.springframework.web.servlet.mvc.AbstractCommandController;
public
class
TestExcelController
extends
AbstractCommandController
...
{
protected
ModelAndView handle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, BindException arg3)
throws
Exception
...
{
return
null
;
}
protected
ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1)
throws
Exception
...
{
return
new
ModelAndView(
"
ListStudentUseExcel
"
,
""
,
""
);
}
}
配置文件:
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"
>
<
beans
>
<
bean
id
="simpleUrlMapping"
class
="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
>
<
property
name
="mappings"
>
<
props
>
<
prop
key
="/excel.mvc"
>
TestExcelController
</
prop
>
</
props
>
</
property
>
</
bean
>
<
bean
id
="ListStudentUseExcel"
class
="Action.ListStudentUseExcel"
></
bean
>
<
bean
id
="beanNameViewResolver"
class
="org.springframework.web.servlet.view.BeanNameViewResolver"
/>
<
bean
id
="TestExcelController"
class
="Action.TestExcelController"
/>
</
beans
>
由于上述配置文件采用了beanNameViewResolver的当时,所以,我们要编写一个合controller返回逻辑名相同的
ViewClass---ListStudentUseExcel,代码如下:
package
Action;
import
java.util.ArrayList;
import
java.util.Iterator;
import
java.util.Map;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
model.Student;
import
org.apache.poi.hssf.usermodel.HSSFCellStyle;
import
org.apache.poi.hssf.usermodel.HSSFDataFormat;
import
org.apache.poi.hssf.usermodel.HSSFRow;
import
org.apache.poi.hssf.usermodel.HSSFSheet;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook;
import
org.springframework.web.servlet.view.document.AbstractExcelView;
public
class
ListStudentUseExcel
extends
AbstractExcelView
...
{
protected
void
buildExcelDocument(Map model,
HSSFWorkbook workbook,
HttpServletRequest request,
HttpServletResponse response)
throws
Exception
...
{
//
设置response方式,使执行此controller时候自动出现下载页面,而非直接使用excel打开
response.setContentType(
"
APPLICATION/OCTET-STREAM
"
);
response.setHeader(
"
Content-Disposition
"
,
"
attachment; filename="
"
+
"
excel.xls
"
+
"
"
"
);
//
构造数据
Student stu1
=
new
Student(
"
gaoxiang1
"
,
"
male1
"
,
"
20060101
"
,
1
);
Student stu2
=
new
Student(
"
gaoxiang2
"
,
"
male2
"
,
"
20060102
"
,
2
);
Student stu3
=
new
Student(
"
gaoxiang3
"
,
"
male3
"
,
"
20060103
"
,
3
);
Student stu4
=
new
Student(
"
gaoxiang4
"
,
"
male4
"
,
"
20060104
"
,
4
);
Student stu5
=
new
Student(
"
gaoxiang5
"
,
"
male5
"
,
"
20060105
"
,
5
);
ArrayList stuList
=
new
ArrayList();
stuList.add(stu1);
stuList.add(stu2);
stuList.add(stu3);
stuList.add(stu4);
stuList.add(stu5);
//
产生Excel表头
HSSFSheet sheet
=
workbook.createSheet(
"
studentList
"
);
HSSFRow header
=
sheet.createRow(
0
);
//
第0行
//
产生标题列
header.createCell((
short
)
0
).setCellValue(
"
name
"
);
header.createCell((
short
)
1
).setCellValue(
"
sex
"
);
header.createCell((
short
)
2
).setCellValue(
"
date
"
);
header.createCell((
short
)
3
).setCellValue(
"
count
"
);
HSSFCellStyle cellStyle
=
workbook.createCellStyle();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(
"
mm/dd/yyyy
"
));
//
填充数据
int
rowNum
=
1
;
for
(Iterator iter
=
stuList.iterator(); iter.hasNext();)
...
{
Student element
=
(Student) iter.next();
HSSFRow row
=
sheet.createRow(rowNum
++
);
row.createCell((
short
)
0
).setCellValue(element.getName().toString());
row.createCell((
short
)
1
).setCellValue(element.getSex().toString());
row.createCell((
short
)
2
).setCellValue(element.getDate().toString());
row.getCell((
short
)
2
).setCellStyle(cellStyle);
row.createCell((
short
)
3
).setCellValue(element.getCount());
}
//
列总和计算
HSSFRow row
=
sheet.createRow(rowNum);
row.createCell((
short
)
0
).setCellValue(
"
TOTAL:
"
);
String formual
=
"
SUM(D2:D
"
+
rowNum
+
"
)
"
;
//
D2到D[rowNum]单元格起(count数据)
row.createCell((
short
)
3
).setCellFormula(formual);
}
}
测试页面:/exlce/ListStudentUseExcel.jsp
<%
...
@ page language
=
"
java
"
contentType
=
"
text/html; charset=GB18030
"
pageEncoding
=
"
GB18030
"
%>
<!
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
>
<
meta
http-equiv
="Content-Type"
content
="text/html; charset=GB18030"
>
<
title
>
Insert title here
</
title
>
</
head
>
<
body
>
<
input
type
="button"
onclick
="javascript:window.location.href='<%=request.getContextPath() %>/excel.mvc'"
value
="download excel"
></
input
>
</
body
>
</
html
>
运行ListStudentUseExcel.jsp,点击下载按钮,程序运行结果及生成的excel如下:
使用Spring MVC生成Excel文档
更多文章、技术交流、商务合作、联系博主
微信扫码或搜索:z360901061
微信扫一扫加我为好友
QQ号联系: 360901061
您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。
【本文对您有帮助就好】 元
喜欢作者