Spring RESTful使用java POI导出数据库记录到Excel(包含图片)

excel 导出为json excel 导出为json,方便绘图等软件使用,包括行列值等信息,亦可包括字体等,只要取CELL的属性即可 立即下载

目的:Spring RESTful使用java POI导出数据库记录到Excel(包含图片)

环境:
win10 x64
Idea 2018.2.3

问题分析:

项目临时需要添加导出mysql数据记录到Excel的功能

解决方案:

使用Java POI包进行数据导出

方法步骤:

1. Pom文件中添加对于POI包依赖

<!-- POI套件 ver3.9-->
<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
</dependency>

2. service和serviceImpl,导出示例:

CommonDataDealServiceImpl.class

@Override 
public void outputPersonInfoToExcel(HttpServletResponse response){
    /* 查询personInfo */
    PersonExampl personExample = new PersonExample();
    List<PersonExample> personList = personMapper.selectByExample(personExample);

    /* 数据库无记录 */
    if(personList.isEmpty()){
        throw new CommonException(CommonMessage.NO_DATA);
    }

    /* 设置导出Excel信息 */
    HSSFWorkbook workbook = new HSSFWorkbook();          // 创建workbook
    HSSFSheet sheet = workbook.createSheet("人员记录");   // 创建sheet, 并设置sheet名
    
    String fileName = "人员信息表.xls";                   // 导出Excel文件名
    String[] headers ={"姓名", "性别", "年龄", "头像"};    // Excel中表头

    HSSFRow headerRow = sheet.createRow)(0);            // 创建表头
    for(int i = 0; i < headers.length; i ++){
        HSSFCell cellTemp = headerRow.createCell(i);
        HSSFRichTextString headerText = new HSSFRichTextString(header[i]);
        cellTemp.setCellValue(headerText);
    }

    /* 插入数据 */
    int rowNum = 1; //从第二行(表头下一行开始插入)

    for(Person person : personList){
        HSSFRow rowTemp = sheet.createRow(rowNum);

        /* 按表头顺序插入姓名、性别、年龄 */
        rowTemp.createCell(0).setCellValue(person.getName);
        rowTemp.createCell(1).setCellValue(person.getSex);
        rowTemp.createCell(2).setCellValue(person.getAge);

        /* 插入头像图片 */
        //下载图片(插入Excel需要byte[]形式的图片, 可自行获取)
        byte[] imgBytes = localFileService.downloadFile(person.getImgPath);  

        if(image != null){  //如图片byte[]有效, 则执行插入图片到头像列
            HSSFPatriarch drawingPatriarch = sheet.createDrawingPatriarch();

            /** anchor主要用于设置图片的属性, 这里详细说明下HSSFClientAnchor的参数
            * HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2)

            * dx1  左上角所在cell的偏移x坐标,一般可设0,范围值为:0~1023,超过1023就到右侧相邻的单元格里
            * dy1  左上角所在cell的偏移y坐标,一般可设0,范围值为:0~256,超过256就到下方的单元格里
            * dx2  右下角所在cell的偏移x坐标,一般可设0,范围值为:0~1023,超过1023就到右侧相邻的单元格里
            * dy2  右下角所在cell的偏移y坐标,一般可设0,范围值为:0~256,超过256就到下方的单元格里
            * col1 左上角所在列
            * row1 左上角所在行
            * col2 右下角所在列 
            * row2 右下角所在行
            * 综上: 如果图片较大, 会占据多行的多个cell, 那么就用图片所在的左上角的cell的cellNum和rowNum及图片右下角所在的cell的cellNum和rowNum来界定图片范围。
            *
            * 例: 假如人员头像占据区域是两行两列的4个cell, 下面写法需要如下(相应的循环里面的row自增时需要对应调整为 rowNum += 2):
            *  HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 3, rowNum, (short) 4, rowNum + 1);
            */
            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 3, rowNum, (short) 3, rowNum);
            HSSFPicture pict = drawingPatriarch.createPicture(anchor, workbook.addPicture(imgBytes, HSSFWorkbook.PICTURE_TYPE_PNG));

            pict.resize(0.5);                                 // 图片等比例缩小
            sheet.setColumnWidth(3, (int) (50 + 0.72) * 256); // 设置列宽, 旧版本该函数参数类型为short
            rowTemp.setHeight((short) 256);                   // 设置行高

        }else{ //如未找到对应头像,则值设置为空
            HSSFCell cellTemp = rowTemp.createCell(3);
            cellTemp.setCellType(HSSFCell.CELL_TYPE_STRING);
            cellTemp.setCellValue("无");
        }

        rowNum += 1;
    }
    
    /* 设置response的header */
    response.setHeader("Content-disposition", "attachment; filename=" + fileName);  
    response.setContentType("application/application/Vnd.ms-excel;charset=UTF-8"); 

    try{
        response.flushBuffer();
        workbook.write(response.getOutputStream());
    } catch (IOException e){
        throw new BaseException(CommonMessage.RESPONSE_STREAM_ERROR);
    }
}

3. Controller中RESTful

@ResponseBody
@RequestMapping(value = "/output/perosnInfo", method = RequestMethod.GET)
public void outputPersonInfo(HttpServletResponse response){
    commonDataDealServiceImpl.outputPersonInfoToExcel(response);
}

4. 测试Html

<html>
    <head>
        <script>
        function dowloadFile(){
            window.location.href="http://localhost:8080/output/personInfo";
        }
        </script>
    </head>
<body>
        <table border="0" style="margin-top: 4px; margin-left: 18px">
                <tr>
                    <td> <a href="#" class="easyui-linkbutton" onclick="dowloadFile();"> 数据导出 </a></td>
                </tr>
        </table>
</body>
</html>

Tips

1. row和cell的关系, 还有序号都是从0开始。
2. 设置列宽和行高的方法。
3. 如含有图片时, 注意计算好图片占据的行列(图片实际覆盖多少格), 然后设置HSSFClientAnchor。
4. 如若请求是POST,只是添加参数,流程类似GET
Springmvc+mybatis+JSON+jQuery+Ajax无刷新登录,导出Excel,修改密码,RestFUL风格增删改查,加Js校验等等 本项目为Springmvc+mybatis+JSON+jQuery+Ajax无刷新登录,导出Excel,修改密码,RestFUL风格增删改查,加Js用户名检验以及密码长度校验等等。并且有大家喜欢的功能导出EXCEL,并且也实现了ajax无刷新注册,登录等等,并且非常清亮的登录模板大家可以看看。并且程序经本人测试可以完美运行。 立即下载

相关推荐

【清风数学建模笔记】第十一讲:时间序列分析

【清风数学建模笔记】第十一讲:时间序列分析

manerzi的博客 832

Java用POI导出Excel表格中的数据

poi操作Excel 主要通过HSSF,XSSF两种方式。 HSSF只能解析.xls格式的excel文件,XSSF支持.xls与.xlsx两种格式。 功能: 传递一个Excel文件,拿到里面所有的数据,返回我猜是这个工具把第一行当成 表头了,而我传入的文件没有表头,里面都是数据,而我的需求是表里面是数字导出来就要是数字。这种方式有个不好的地方:第一行数据导出来都是字符串类型的。所以这种方式不满足我现在的需求,如果有表头就可以这样写。Excel中的数据是什么类型,就返回什么类型的数据。说下我之前导出的方式。.

weixin_45581692的博客 1444

告别安装烦恼!Orange3 3.38.0 Windows绿色版下载即用,附保姆级汉化与组件配置指南

本文详细介绍了Orange3 3.38.0 Windows绿色版的下载与使用,包括中文汉化、组件配置及高效管理技巧。这款无需安装的数据科学工具特别适合快速验证想法的研究人员和移动办公用户,支持多种数据源和可视化工具,大幅提升工作效率。

weixin_30897233的博客 602

Java使用POi导出Excel(包含图片)

<div id="article_content" class="article_content clearfix"> <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css"> <div id="content_views" class="htm...

wzhwangzhuohui的博客 1904

Surface Go 2 变身 Linux 开发本:保姆级 Ubuntu 20.04 双系统安装与驱动配置全攻略

本文详细介绍了如何将 Surface Go 2 变身为高效的 Linux 开发本,涵盖 Ubuntu 20.04 双系统安装、专用内核配置、驱动优化等全流程。通过 linux-surface 内核安装和硬件驱动优化,确保 Surface Go 2 的触控、笔输入、摄像头等功能完美运行,适合开发者打造便携生产力工具。

weixin_30596165的博客 616

MounRiver Studio实战:像管理个人项目一样整理沁恒MCU的EVT例程(附文件结构图)

本文详细介绍了如何使用MounRiver Studio重构沁恒MCU的EVT例程,实现工程化管理。通过分析官方EVT设计的局限性,提出标准化的目录结构和迁移步骤,帮助开发者提升代码可维护性和团队协作效率。文章还提供了MounRiver Studio的关键配置参数和常见问题排查指南,适用于沁恒MCU开发者。

weixin_33940469的博客 356

java restful文件传输_【Java】前后端分离restful风格后端如何传文件给前端提供导出word功能...

后端已经实现了从数据库读取数据然后生成word的功能,问题是如何让前端能下载这个word而且这个word是动态生成的,每次访问得到的数据都不一样。目前的形式是所有的数据都由后端生成json传给前端回答给个提示性思路,我没有试过。是给后端做,后端生成一个word 文件,前端直接去下载这个文件就可以了。后端生成word文件技术,网上一艘就有,前端下载文件技术网上也非常多。前端生成word文件,然后导出...

weixin_42140625的博客 993

【Camera2教程一】Camera2的框架Pipeline和framework中核心类和接口的详细介绍

Camera2 的 API 模型被设计成一个 Pipeline(管道),它按顺序处理每一帧的请求并返回请求结果给客户端。

jiangchaobing_2017的博客 792

关于RestFul接口的文件导入导出的实现

如果一个接口的请求参数或者相应接口的数据内容过大,需要以json文件的形式来进行交互,可以通过以下方式进行编码实现 导入json类型的文件 /** * 流程导入json数据接口 */ @PostMapping("/deployProd/import") @Timed @ApiOperation(value="流程导入json数据接口", notes="流...

阿西吧丶的博客 6825

Open3D点云数据处理(二):读写点云,你真的会吗?

本文详细介绍了open3d加载点云、保存点云的方法,同时打印点云坐标、颜色、法向量等字段信息。

孙悟空 2604

jdbc从入门到精通(全)

前言 Java语言连接数据库(Java DataBase Connectivity) 面向接口/抽象编程(降低程序的耦合度,提高程序的扩展力)类似多态机制

码农研究僧的博客 1758

jws 方式表格导出,excel文件导出,rest风格接口实现

一、思路:从数据库表中查出list ,封装到 HSSFWorkook 中,再由HSSFWorkook 写出到 File 中,用 response 的 build 方法 实现下载、导出。二、 实现代码:要加上注解 :@Produces ,文本就写 text , 图片写 img ( 如果我没有记错的话) @Path("/exportWWCollectReport") @Produces...

愿我如星君如月 ... 夜夜流光相皎洁 ... 2344

微信小程序——01开发前的准备和开发工具

微信小程序——01开发前的准备和开发工具

总裁余(余登武)博客 1万+

spring boot导出excel

package com.api.test.controller; import com.api.test.dao.UserRepository; import com.api.test.entity.UserDO; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletOutp.

大猩猩的博客 261

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

POI 3.17 导出Excel,基础代码

工作中经常要用到excel的导出,所以参考其他人的demo写了一个导出excel的基础代码。如果以后再需要用的时候,直接拿来修改下就能直接使用。 参考博文地址:https://blog.youkuaiyun.com/phil_jing/article/details/78307819 以下是maven依赖 <dependency> <group...

feng2036的博客 620

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java导出Excel工具类

依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> ...

zdj18166896501的博客 421

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数据库中数据如何导出生成Excel?

-本文目的:  将数据库中的数据导出并生成Excel。如果想要让Excel中的数据导入apach POI包

Eleven的博客 7410

java导出EXCEL表格

Controller @PostMapping("/exportInfo") @ResponseBody public Rest exportJasInfo(HttpServletRequest request, HttpServletResponse response, String queryRequest) { QueryCondition ...

sskai163的博客 244

java实现将数据库数据转化成excel表格显示出来

import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.userm...

小屁孩大帅-保密的博客 1508

在 SpringMVC 使用 POI 以 Excel 表格形式 导出导入 MySQl 数据

一、前言最近涉及的项目如学生宿舍管理系统、题库、图片文字读取等,数据的导入导出,基本都是要用到 客户 熟悉的 Excel 表下面来个 Excel导入导出 简单的使用记录,使用的基础知识:① Excel 表格数据的处理,使用了 POl ② Java 后台,依旧是笔者喜欢的简洁有力的 SpringBoot 二、代码与结构1、代码结构代码修改之前文 使用 SpringBoot 写 Restful风格 增

IT小村 4316

excel导出

个人笔记

ZeroBz的博客 3004

java数据导出到Excel

excel处理函数需要引入poi的jar包,在pom.xml引入一下代码 &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; &lt;artifactId&gt;poi&lt;/artifactId&gt; &lt;version&gt;3.17&lt;/version&gt; &lt;

凡是过往,皆为序章 7006

Excel 导入导出spring boot starter 组件 业务代码零侵入

Excel 导入导出spring boot starter 组件 业务代码零侵入。

qq_20466509的博客 765

POI数据导出Excel

@RestController @RequestMapping("/export") @Api(value = "导出知识点表格", consumes = "application/json", produces = "application/json", protocols = "http") public class ExportCourseFileController { @Aut...

qq_36969486的博客 276

java显示数据库表_java实现将数据库数据转化成excel表格显示出来

import org.apache.log4j.LogManager;import org.apache.log4j.Logger;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel....

weixin_31833039的博客 293

SpringBoot+Mybatis+MySQL+Vue+ElementUI,用POI导出和导入Excel文件案例

1、操作环境 后端:IDEA+SpringBoot+Mybatis 前端:WebStorm+Vue+ElementUI 2、后端代码 ①添加依赖 <!--导入POI依赖,ms office文件生成--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>p...

Kyo的博客 8590
上一篇: Centos7 离线安装redis 4.0.11
下一篇: Python 使用PyQt5进行界面程序开发
hi come
博客等级 码龄14年 33粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值