欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

poi生成excel下载

程序员文章站 2022-07-13 13:00:55
...

一、springmvc入口

@RequestMapping(value="downloadExcel")
public void downloadExcel(HttpServletRequest request, HttpServletResponse response){
    OutputStream outputStream = null;
    FileOutputStream fileOutputStream = null;
    try {
        String fileName = "工作文档.xls";
        fileName = URLEncoder.encode(fileName, "UTF-8");
        response.reset();
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
        outputStream = response.getOutputStream();

        List<User> users = buildExcelContent();

        // 创建新的Excel 工作簿
        Workbook workbook = buildWorkbook(users);

        //写本地磁盘
        fileOutputStream = new FileOutputStream(new File("D:\\用户目录\\下载\\test.xls"));
        workbook.write(fileOutputStream);

        //下载
        workbook.write(outputStream);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(outputStream != null){
                outputStream.close();
            }
            if(fileOutputStream != null){
                fileOutputStream.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

二、构建内容

private List<User> buildExcelContent(){
    List<User> users = new ArrayList<>();
    User user = new User();
    user.setId(1);
    user.setUserName("张三");
    users.add(user);

    user = new User();
    user.setId(2);
    user.setUserName("李四");
    users.add(user);

    user = new User();
    user.setId(3);
    user.setUserName("王五");
    users.add(user);
    return users;
}

三、生成excel

private Workbook buildWorkbook(List<User> users){
    // 创建新的Excel 工作簿
    HSSFWorkbook workbook = new HSSFWorkbook();

    // 在Excel工作簿中建一工作表,其名为缺省值, 也可以指定Sheet名称
    HSSFSheet sheet = workbook.createSheet();
    HSSFSheet sheet = workbook.createSheet("SheetName");

    // 用于格式化单元格的数据
    HSSFDataFormat format = workbook.createDataFormat();

    // 创建新行(row),并将单元格(cell)放入其中. 行号从0开始计算.
    HSSFRow row = sheet.createRow((short) 1);

    // 设置字体
    HSSFFont font = workbook.createFont();
    font.setFontHeightInPoints((short) 20); //字体高度
    font.setColor(HSSFFont.COLOR_RED); //字体颜色
    font.setFontName("黑体"); //字体
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度
    font.setItalic(true); //是否使用斜体
    //font.setStrikeout(true); //是否使用划线

    // 设置单元格类型
    HSSFCellStyle cellStyle = workbook.createCellStyle();
    cellStyle.setFont(font);
    cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平布局:居中
    cellStyle.setWrapText(true);

    // 创建每行单元格
    HSSFCell cell = null;
    for(int i=0; i< users.size(); i++){
        row = sheet.createRow(i);

        cell = row.createCell(0);
        cell.setCellValue(users.get(i).getId());

        cell = row.createCell(1);
        cell.setCellValue(users.get(i).getUserName());
    }

    return workbook;
}

四、参考

https://www.cnblogs.com/azhqiang/p/4111197.html