• Java实现Excel导出(查询数据库中的数据并以Excel文件导出)


    数据库数据准备

    CREATE TABLE `people` (
      `id` int(11) NOT NULL,
      `name` varchar(45) DEFAULT NULL,
      `status` int(11) DEFAULT NULL,
      `content` varchar(200) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    填充数据

    insert  into `people`(`id`,`name`,`status`,`content`) values (1,'zhangsan',1,'hello'),(2,'lisi',1,'word'),(3,'wangwu',1,'java');

    简易页面

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    <body>
    <h1>文档导出</h1>
    <form method="post" action="/">
        <button type="button" id="peopleId" onclick="upload()">Excel导出</button>
    </form>
    </body>
    <script>
        function upload() {
            $.ajax({
                type: "post",
                async: false,
                cache: false,
                processData: false,
                contentType: false,
                url: "/excel/export",
                success: function (res) {
                    alert(res);
                }
            })
        }
    </script>
    </html>

    代码Demo

    1、controller

    @RestController
    @RequestMapping("/excel")
    public class ExcelController {
    
        @Autowired
        public ExcelService excelService;
    
        @RequestMapping("export")
        public String excelExport() {
            return excelService.excelExport();
        }
    }

    2、service

        @Override
        public String excelExport() {
            //根据id查询数据
            List<People> peopleList = excelMapper.getPeopleById();
            if (peopleList == null || peopleList.isEmpty()) {
                return "failed";
            }
            //生成文件路径
            String newFilePath = "D:\\ExcelExport";
            //文件名称
            String fileName = "people.xlsx";
            //输出流
            OutputStream out = null;
            //Excel文件
            XSSFWorkbook workBook = new XSSFWorkbook();
            //Excel页脚
            XSSFSheet sheet = workBook.createSheet("数据导出");
            //设置列的宽度
            sheet.setDefaultColumnWidth(16);
            //创建标题行
            XSSFRow titleRow = sheet.createRow(0);
            String[] title = new String[]{"id", "name", "status", "content"};
            //设置标题字体样式
            XSSFCellStyle cellStyle = workBook.createCellStyle();
            XSSFFont font = workBook.createFont();
            font.setBold(true);//加粗
            font.setFontHeightInPoints((short) 14);//设置字体大小
            cellStyle.setFont(font);
            //设置标题列
            for (int i = 0; i < title.length; i++) {
                //创建标题的单元格
                XSSFCell titleCell = titleRow.createCell(i);
                //填充标题数值
                titleCell.setCellValue(title[i]);
                //设置样式
                titleCell.setCellStyle(cellStyle);
            }
            //填充数据
            //第一行是标题所以要从第二行开始
            for (int i = 0; i < peopleList.size(); i++) {
                People people = peopleList.get(i);
                XSSFRow row = sheet.createRow(i + 1);
                for (int j = 0; j < title.length; j++) {
                    XSSFCell titleCell = row.createCell(j);
                    String exportKey = title[j];
                    switch (exportKey) {
                        case "id":
                            titleCell.setCellValue(people.getId());
                            break;
                        case "name":
                            titleCell.setCellValue(people.getName());
                            break;
                        case "status":
                            titleCell.setCellValue(people.getStatus());
                            break;
                        case "content":
                            titleCell.setCellValue(people.getContent());
                            break;
                    }
                }
            }
            try {
                File file = new File(newFilePath + File.separator + fileName);
                out = new FileOutputStream(file);
                workBook.write(out);
                out.flush();
                out.close();
            } catch (Exception e) {
                log.info(e.getMessage());
            }
            return "success";
        }

    3、mapper

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.bootdemo.myspringboot.mapper.ExcelMapper">
        <resultMap id="people" type="com.bootdemo.myspringboot.bean.People">
            <result column="id" property="id"></result>
            <result column="name" property="name"></result>
            <result column="status" property="status"></result>
            <result column="content" property="content"></result>
        </resultMap>
    
        <select id="getPeopleById" resultMap="people">
            SELECT
               *
            FROM
                people t
        </select>
    
    </mapper>

    4、bean对象

    public class People {
        private String id;
        private String name;
        private String status;
        private String content;
    。。。setterAndGetter。。。
    }

    结果

    1、先准备一个空文件夹(例如D盘的ExcelExport)

    2、点击页面“Excel导出”,提示“成功”

     

     3、查看目录中文件是否生成并打开查看文件内容

     补充:

    参考学习博客:https://blog.csdn.net/w893932747/article/details/89354979

  • 相关阅读:
    canvas绘图详解-10-文字渲染
    canvas绘图详解-09-曲线的绘制原理
    websocket,vue链接
    JS 数组对象根据某一相同key合并成新的数组
    nuxt $axios访问多个服务器地址请求数据
    正则去除字符串中的html标签,但不去除<br>标签
    css多行文本溢出显示省略号(兼容ie)
    input accept
    jquery.toast
    jquery toast
  • 原文地址:https://www.cnblogs.com/Bernard94/p/16199707.html
Copyright © 2020-2023  润新知