当前位置: 首页 > news >正文

springmvc 导出excel

springmvc 导出excel

http://blog.csdn.net/wlsyn/article/details/10195193

package com.tuling.view;
import java.io.OutputStream;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
public class ViewExcel extends AbstractExcelView {
    @Override
    public void buildExcelDocument(Map<String, Object> obj, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String filename = "message.xls";// 设置下载时客户端Excel的名称
        // filename = StringUtils.encodeFilename(filename, request);//处理中文文件名
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-disposition", "attachment;filename=" + filename);
        OutputStream ouputStream = response.getOutputStream();
        workbook.write(ouputStream);
        ouputStream.flush();
        ouputStream.close();
    }
}

controller

@RequestMapping(value = "export")
    public ModelAndView exportExcel(ModelMap model, HttpServletRequest request, HttpServletResponse response) {
        ViewExcel viewExcel = new ViewExcel();
        Map<String, Object> obj = null;
        // 获取数据库表生成的workbook
        HSSFWorkbook workbook = new HSSFWorkbook();
        List<Message> list = messageMapper.selectAll();
        // excel文件名
        try {
            HSSFSheet sheet = workbook.createSheet("消息反馈");
            // workbook.setSheetName(0,sheetName,HSSFWorkbook..ENCODING_UTF_16);
            HSSFRow row = sheet.createRow((short) 0);
            HSSFCell cell = null;
            // 写入各个字段的名称
            cell = row.createCell(0);
            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
            cell.setCellValue("名称");
            cell = row.createCell(1);
            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
            cell.setCellValue("公司");
            int iRow = 1;
            for (Message message : list) {
                // 写入各条记录,每条记录对应Excel中的一行
                row = sheet.createRow((short) iRow);
                cell = row.createCell(0);
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                cell.setCellValue(message.getName());
                cell = row.createCell(1);
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                cell.setCellValue(message.getCompany());
                iRow++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            viewExcel.buildExcelDocument(obj, workbook, request, response);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ModelAndView(viewExcel, model);
    }

 处理一下中文

        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        String filename = format.format(new Date())+"消息反馈.xls";// 设置下载时客户端Excel的名称
        // filename = StringUtils.encodeFilename(filename, request);//处理中文文件名
        filename = URLEncoder.encode(filename, "UTF-8"); 

 设置表格的列宽

sheet.setColumnWidth(2, 10000);

 

相关文章:

  • iPad是代替笔记本和手机?还是活在夹缝中间?
  • Bing Maps进阶系列九:使用MapCruncher进行地图切片并集成进Bing Maps
  • linux 一些实用工具整理(定期更新)
  • Golang 笔记 3 if、switch、for、select语句
  • [技术][.NET]一步一步学Linq to sql -- Joney Liu博客园整理
  • LNMP环境部署
  • AR28-11路由器QOS限速
  • RecyclerView源码解析
  • 【AD用户设置系列二】批量修改漫游配置文件路径
  • BZOJ 2140 Tarjan
  • B2C的购物车概述
  • Visual Studio 2010 Team Foundation Server 安装截图
  • mac下查看占用端口的进程及杀死进程
  • Eclipse报错(”Could not reserve enough space for object heap”)
  • Oracle 基础系列之1.1 oracle的安装
  • 【刷算法】从上往下打印二叉树
  • Intervention/image 图片处理扩展包的安装和使用
  • k8s 面向应用开发者的基础命令
  • nginx 负载服务器优化
  • Vue--数据传输
  • Zsh 开发指南(第十四篇 文件读写)
  • 第十八天-企业应用架构模式-基本模式
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 面试遇到的一些题
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我这样减少了26.5M Java内存!
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • #NOIP 2014#Day.2 T3 解方程
  • $.ajax()方法详解
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (AngularJS)Angular 控制器之间通信初探
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (十一)c52学习之旅-动态数码管
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转)C#调用WebService 基础
  • (转)nsfocus-绿盟科技笔试题目
  • .net mvc部分视图
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net实现客户区延伸至至非客户区
  • .NET中winform传递参数至Url并获得返回值或文件
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [20190401]关于semtimedop函数调用.txt
  • [Android]常见的数据传递方式
  • [C# 基础知识系列]专题十六:Linq介绍
  • [codeforces] 25E Test || hash
  • [codeforces]Recover the String
  • [CTF]php is_numeric绕过
  • [iphone-cocos2d]关于Loading的若干处理和讨论
  • [java刷算法]牛客—剑指offer链表有环的入口、反转链表、合并排序链表