这个示例见这个项目的 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 文件查看结果。


行一
51 声望35 粉丝

人不可能记住所有的细节