zoukankan      html  css  js  c++  java
  • spring-boot导出excel

    spring-boot导出excel

    本文使用Apache POL实现excel文档的导出

    pom.xml 添加Apache POL依赖

    <dependency>  
        <groupId>org.apache.poi</groupId>  
        <artifactId>poi</artifactId>  
        <version>3.14</version>  
    </dependency>  
    

    导出excel

    导出excel比较重要的api有以下几个,其他的并无难点

    • 创建一个excel文件工作薄;(HSSFWorkbook workbook = new HSSFWorkbook())
    • 创建一张表;HSSFSheet sheet = workbook.createSheet("统计表")
    • 创建一行;HSSFRow row = sheet.createRow(0)
    • 填充一列数据; row.createCell(0).setCellValue("数据")
    • 设置一个单元格样式;cell.setCellStyle(style)
    package com.example.demo.controller;
    
    import com.example.demo.domain.User;
    import com.example.demo.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFDataFormat;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.net.URLEncoder;
    import java.util.List;
    
    @RestController
    @RequestMapping(value = "/excel")
    public class ExcelController {
    
        @Autowired
        private UserService userService;
    
        //创建表头
        private void createTitle(HSSFWorkbook workbook,HSSFSheet sheet){
            HSSFRow row = sheet.createRow(0);
            //设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
            sheet.setColumnWidth(1,12*256);
            sheet.setColumnWidth(3,17*256);
    
            //设置为居中加粗
            HSSFCellStyle style = workbook.createCellStyle();
            HSSFFont font = workbook.createFont();
            font.setBold(true);
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            style.setFont(font);
    
            HSSFCell cell;
            cell = row.createCell(0);
            cell.setCellValue("ID");
            cell.setCellStyle(style);
    
    
            cell = row.createCell(1);
            cell.setCellValue("显示名");
            cell.setCellStyle(style);
    
            cell = row.createCell(2);
            cell.setCellValue("用户名");
            cell.setCellStyle(style);
    
            cell = row.createCell(3);
            cell.setCellValue("创建时间");
            cell.setCellStyle(style);
        }
    
        //生成user表excel
        @GetMapping(value = "/getUser")
        public String getUser(HttpServletResponse response) throws Exception{
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = workbook.createSheet("统计表");
            createTitle(workbook,sheet);
            List<User> rows = userService.getAll();
    
            //设置日期格式
            HSSFCellStyle style = workbook.createCellStyle();
            style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
    
            //新增数据行,并且设置单元格数据
            int rowNum=1;
            for(User user:rows){
                HSSFRow row = sheet.createRow(rowNum);
                row.createCell(0).setCellValue(user.getId());
                row.createCell(1).setCellValue(user.getName());
                row.createCell(2).setCellValue(user.getUsername());
                HSSFCell cell = row.createCell(3);
                cell.setCellValue(user.getCreate_time());
                cell.setCellStyle(style);
                rowNum++;
            }
    
            String fileName = "导出excel例子.xls";
    
            //生成excel文件
            buildExcelFile(fileName, workbook);
    
            //浏览器下载excel
            buildExcelDocument(fileName,workbook,response);
    
            return "download excel";
        }
    
        //生成excel文件
        protected void buildExcelFile(String filename,HSSFWorkbook workbook) throws Exception{
            FileOutputStream fos = new FileOutputStream(filename);
            workbook.write(fos);
            fos.flush();
            fos.close();
        }
    
        //浏览器下载excel
        protected void buildExcelDocument(String filename,HSSFWorkbook workbook,HttpServletResponse response) throws Exception{
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename, "utf-8"));
            OutputStream outputStream = response.getOutputStream();
            workbook.write(outputStream);
            outputStream.flush();
            outputStream.close();
        }
    
    
    }

    转载地址:https://my.oschina.net/tongjh/blog/1600000
  • 相关阅读:
    RN8209校正软件开发心得(1)
    Chrome 31版本导出Excel问题
    ComBox选择
    网页设计的一般步骤
    .NET一套开发工具
    关于用sql语句实现一串数字位数不足在左侧补0的技巧
    python jieba模块详解
    python内置函数详细描述与实例演示
    Markdown的基本语法记录
    python configparser模块详解
  • 原文地址:https://www.cnblogs.com/IT-TOP/p/10552526.html
Copyright © 2011-2022 走看看