这个示例见这个项目的 mvc 分支下的 VestXlsViewController.java
1)首先创建一个 Xls 视图类
package com.techmap.examples.view;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.WorkbookUtil;
import org.springframework.web.servlet.view.document.AbstractXlsView;
/**
* 这里只处理 xls 格式的 Excel。
* <p/>
* Spring 提供的其他相关支持见包 org.springframework.web.servlet.view.*
* <p/>
* 更多Xls文件操纵示例见<a href="http://poi.apache.org/spreadsheet/quick-guide.html"> Apache POI 官方文档</a>
*
* @author Angrynut
*
*/
public class XlsView extends AbstractXlsView
{
private static Logger log = Logger.getLogger(XlsView.class);
@Override
protected void buildExcelDocument(Map<String, Object> model,
Workbook workbook,
HttpServletRequest request, HttpServletResponse response)
throws Exception
{
log.debug("------> 开始构建 xls 工作簿");
// 你可以通过请求来处理请求参数
CreationHelper createHelper = workbook.getCreationHelper();
if(workbook.getNumberOfSheets() == 0)
{
String safeName = WorkbookUtil.createSafeSheetName("Spring Sheet");
Sheet sheet = workbook.createSheet(safeName);
// 创建一个行,把单元格放到行中。第一行的行号是 0
Row row = sheet.createRow((short) 0);
// 创建一个单元格,并为单元格设置值
Cell cell = row.createCell(0);
cell.setCellValue(1);
// 也可以在同一行代码中做到
row.createCell(1).setCellValue(1.2);
row.createCell(2).setCellValue(
createHelper.createRichTextString("This is a string"));
row.createCell(3).setCellValue(true);
}
log.debug("------> 构建 xls 工作簿完成");
}
}
2)配置视图解析器
首先,在应用程序上下文中配置一个XmlViewResolver
:
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="order" value="0"/>
<property name="location" value="classpath:mvc-views.xml"/>
</bean>
注意到上面配置的XmlViewResolver
指向一个mvc-views.xml
文件。这个mvc-views.xml
文件是一个 Spring 配置文件,在这个文件中,配置我们上面定义的XlsView
类的 Bean,要指定 id,后面会使用。下面在类路径下添加这个文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 这里配置需要 XML 视图解析器处理的视图 -->
<bean id="xlsview" class="com.techmap.examples.view.XlsView" />
</beans>
3)编写控制器
@Controller
@RequestMapping("/excel/view")
public class VestXlsViewController
{
@GetMapping("/xls")
public String getXls() { return "xlsview"; }
}
注意,这个控制器返回的是在mvc-views.xml
文件中配置的 Bean 的 id。
4)测试
在浏览器中发送请求excel/view/xls
后,浏览器会产生一个下载 xls 文件提醒。下载这个 xls 文件查看结果。