SpringMVC使用poi生成Excel文件并下载

SpringMVC使用poi生成Excel文件并下载

废话不多说直接上代码

首先你需要一个工具栏WriteExcel

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class WriteExcel{

    /**
     * 生成Excel表格
     *
     * @param sheetName sheet名称
     * @param titleList 表头列表
     * @param dataList  数据列表
     * @return HSSFWorkbook对象
     */
    public static HSSFWorkbook createExcel(String sheetName,
                                           List<String> titleList, List dataList) throws IllegalAccessException {
        //创建HSSFWorkbook对象
        HSSFWorkbook wb = new HSSFWorkbook();
        //创建sheet对象
        HSSFSheet sheet = wb.createSheet(sheetName);
        //在sheet里创建第一行,这里即是表头
        HSSFRow rowTitle = sheet.createRow(0);

        //写入表头的每一个列
        for (int i = 0; i < titleList.size(); i++) {
            //创建单元格
            rowTitle.createCell(i).setCellValue(titleList.get(i));
        }

        //写入每一行的记录
        for (int i = 0; i < dataList.size(); i++) {
            //创建新的一行,递增
            HSSFRow rowData = sheet.createRow(i + 1);

            //通过反射,获取POJO对象
            Class cl = dataList.get(i).getClass();
            //获取类的所有字段
            Field[] fields = cl.getDeclaredFields();
            for (int j = 0; j < titleList.size(); j++) {
                //设置字段可见,否则会报错,禁止访问
                fields[j].setAccessible(true);
                //创建单元格
                if (!fields[j].getType().toString().contains("String")) {
                    rowData.createCell(j).setCellValue(Double.parseDouble(fields[j].get(dataList.get(i)).toString()));
                } else {
                    rowData.createCell(j).setCellValue(String.valueOf(fields[j].get(dataList.get(i))));
                }
            }
        }
        return wb;
    }
}

关于工具类的补充
1.如何设置样式
HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);// 左右居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中
        style.setWrapText(true);
        sheet.setDefaultColumnWidth(20);
        style.setBorderBottom(BorderStyle.THIN);
        style.setBorderLeft(BorderStyle.THIN);
        style.setBorderRight(BorderStyle.THIN);
        style.setBorderTop(BorderStyle.THIN);
2.如何合并单元格
//开始行,结束行,开始列,结束列
  CellRangeAddress region = new CellRangeAddress(0000);
            sheet.addMergedRegion(region);
            //给合并后的单元格添加边框
            RegionUtil.setBorderBottom(BorderStyle.THIN, region, sheet);
            RegionUtil.setBorderLeft(BorderStyle.THIN, region, sheet);
            RegionUtil.setBorderRight(BorderStyle.THIN, region, sheet);
            RegionUtil.setBorderTop(BorderStyle.THIN, region, sheet);
SpringMvc下载生成的Excel文件

这里只写的Controller中的代码,实际上应该将调用WriteExcel类的方法,构建数据等工作放在在Service中

 @RequestMapping(value = "/outexcel.json", method = RequestMethod.GET)
    public @ResponseBody
    String outexcel(String param, HttpServletResponse response) throws IOException, IllegalAccessException {

        String fileName = "文件名";
        //这里List的数据就是你要生成Excel表格中的数据,根据实际业务去获取,我这里就不写了
        List titleList=new Arraylist();
        List datalist=new Arraylist();
        HSSFWorkbook workbook = null;
        try {
            workbook = (HSSFWorkbook) WriteExcel.createExcel(fileName,titleList,datalist);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        OutputStream output = response.getOutputStream();
        response.reset();
        //中文名称要进行编码处理
        response.setHeader("Content-disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName + ".xls", "UTF-8"));
        response.setContentType("application/x-xls");
        // response.setContentType("application/vnd.ms-excel");
        //response.setHeader("Content-Disposition", "attachment;" + "filename=\"" + fileName + "\"");
        //response.setContentType("application/octet-stream");
        workbook.write(output);
        output.close();
        return null;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值