使用SpringBoot+MongoDB数据导出为Excel文件
MongoDB数据导出为Excel文件
注:
本文使用的是POI导出文件
导出数据两种创建工作簿的方式
// 创建工作簿 XSSFWorkbook wb = new XSSFWorkbook(); // 最多只能创建 16384列 HSSFWorkbook workbook = new HSSFWorkbook(); // 最多只能创建 256列
XSSFCellStyle 设置导出Excel的格式
https://blog.csdn.net/liyang19951112/article/details/81814747
设置格式部分核心代格式代码
链接: HSSFCellStyle.
下面我们写一个完整的查询MongoDB数据导出Excel的java代码
- Gradle配置信息
- 创建MongoDB数据表
- entity Dao DaoImpl
-
ExcelUserServiceImpl
加入导出数据的包
注:这个是Gradle的导包代码 Maven的可以去Maven官方搜索 org.apache.poi
//导出文件 这里使用的是3.15版本的,如果下载更高版本 有些方法会提示不建议使用 compile group: 'org.apache.poi', name: 'poi', version: '3.15-beta1' compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.15-beta1'
创建一个要导出数据的mongoDB
Key | Value |
---|---|
“userId” | “VxC01”, |
“phone” | “12545125412” |
“name” | “苏大强” |
“_class” | “com.yst.june.entity.User” |
“wxName” | “天线宝宝” |
//创建MongeDB的User表 "userId" : "VxC01", "phone" : "12545125412", "name" : "苏大强", "wxName" : "天线宝宝" "_class" : "com..entity.User", //这个为映射java的entity类
User --实体类
//User实体类 public class User { private String userId; private String phone; private String name; private String wxName; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId= userId; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getWxName() { return wxName; } public void setWxName(String wxName) { this.wxName = wxName; } }
UserAo
写这个Ao是为了多表查询的时候可以用到,把自己需要返回的字段都放在一起。。。
//UserAo public class User { private String userId; private String phone; private String name; private String wxName; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId= userId; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getWxName() { return wxName; } public void setWxName(String wxName) { this.wxName = wxName; } }
UserDao --Dao接口
//Dao接口 public interface UserDao { List<User> FindUsers();//查找所有数据 }
UserDaoImpl --Dao实现层
//Dao实现层 @Repository public Class UserDao implements UserDaoImpl{ //注入MongoTemplate @Autowired MongoTemplate mongoTemplate; @Autowired UserDao userDao; //查询用户信息 @Override public List<User> selectUsers() { Query query = new Query(); return mongoTemplate.find(query, User.class, CollCons.LLB_USER);//查询信息 } }
ExcelUserService --Service接口
public interface ExcelUserService { //查询用户信息 List<User> selectUsers(); }
ExcelUserServiceImpl --数据导出ServiceImpl
@Service public class ExcelUserServiceImpl implements ExcelUserService { @Autowired ExcelUserDao excelUserDao; @Autowired MongoTemplate mongoTemplate; //User用户 @Override public List<User> selectUsers() { List<User> userList = excelUserDao.selectUsers(); return userList; } }
ExcelOutController --Controller控制层
导出数据较大,所以采用:
XSSFWorkbook wb = new XSSFWorkbook();
//这里只是导入了要用到的关键包 映射的service ,entity 我都没导入 import org.apache.poi.xssf.usermodel.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.List; /** * 〈一句话功能简述〉<br> * 〈数据库导出ExcelController〉 * * @author Mr.Wang * @create 2019/6/5 * @since 1.0.0 */ @Controller @ResponseBody @RequestMapping(value = "/export") public class ExcelOutController { @Autowired ExcelUserService excelUserService; /** * @Description: 导出数据库里的数据 * @Param: 设置导出格式(或许有用.......) * @Warning: Excel的导出路径就在D://daochu/这个路径下user.xls表格 * @Author: Mr.Wang * @Date: 2019/6/6 */ @RequestMapping(value = "/list") @ResponseBody public void export(HttpServletResponse response) throws IOException { List<User> users = excelUserService.selectUsers();//查询用户信息 XSSFRow row = null;//声明一个空列 //获取一个工作簿 XSSFWorkbook wb = new XSSFWorkbook();// 最多只能创建 16384列 //HSSFWorkbook workbook = new HSSFWorkbook(); // 最多只能创建 256列 //新建一个表格 XSSFSheet sheet = wb.createSheet("用户表");//生成一个 //如果需要一个Excel里有多个分表 就像这样继续wb.createSheet XSSFSheet sheet1 = wb.createSheet("第二个用户");//生成第二个 sheet.setDefaultColumnWidth((short) 15);//列宽 /** *设置表格抬头 如果不需要可以省略 */ row = sheet.createRow(0);//起始坐标 row.setHeight((short) (18.5 * 20));//设值行高 row.createCell(0).setCellValue("序号");//为第一个单元格设抬头 这个为自增的id row.createCell(1).setCellValue("用户id");//为第一个单元格设抬头 这个为userId row.createCell(2).setCellValue("用户名字");//为第二个单元格设抬头 row.createCell(3).setCellValue("用户手机号");//为第二个单元格设抬头 row.createCell(4).setCellValue("昵称");//为第四个单元格设抬头 //获取List<User>根据 size() 循环写入row 里 for (int i = 0; i < users.size(); i++) { row = sheet.createRow(i + 1); XSSFCell cell = row.createCell(i + 1); User user1 = users.get(i); // 实例化一个空的Ao进行序号转译后的填充 UserAo userAo1 = new UserAo(); BeanUtils.copyProperties(user1, userAo1); row.createCell(0).setCellValue(i + 1); row.createCell(1).setCellValue(userAo1.getUserId()); row.createCell(2).setCellValue(userAo1.getName()); row.createCell(3).setCellValue(userAo1.getPhone()); row.createCell(4).setCellValue(userAo1.getWxName()); } sheet.setDefaultRowHeight((short) (18.5 * 40));//设置默认行高 sheet.setDefaultColumnWidth(17);//列宽 // 进行组装生成,并关闭Io操作 response.setContentType("application/vn.ms-excel;charset=UTF-8"); OutputStream os = response.getOutputStream(); //(名称可以自定义filename=*.xls) response.setHeader("Content-disposition", "attachment;filename=user.xls");//默认Excel名称 wb.write(os); //路径可自定义 wb.write(new FileOutputStream(new File("D://DaoChu/user.xls")));//执行成功后在这个路径下寻找User.xls os.flush(); os.close(); } }
同理如果想生成多个子表 使用继续复制写好的然后改变sheet 为sheet1进行追加导出
------------如何运行?
1、第一种 使用接口测试
可以使用测试接口的工具 Insomnia下面为下载链接
链接:https://pan.baidu.com/s/1_vOOy_aKyZFy85QZqG_gnQ
提取码:pzs3
复制这段内容后打开百度网盘手机App,操作更方便哦
2、编写测试类运行
IDEA 生成测试类的快捷键为 Ctrl+Shift+T
import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @Author: Mr.Wang * @Description: 测试类使用的是Junit MockMvc测试 * @Date: Created in 14:21 2019/6/14 * @Modifind By: */ public class ExcelOutControllerTest extends WelApplicationTest { private static final Logger log= LoggerFactory.getLogger(BannerControllerTest.class); MockMvc mockMvc; @Autowired public WebApplicationContext webApplicationContext; @Before public void setUp() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } @Test public void export()throws Exception { String rsp= mockMvc.perform(post("/export/list") .contentType(MediaType.APPLICATION_JSON_UTF8) .characterEncoding("UTF-8") .content("")).andExpect(status().isOk()).andDo(print()).andReturn().getResponse().getContentAsString(); log.info("result:{} ", rsp); } }
最后运行的结果
关于本次的一些细节
比如Springboot配置Gradle加MongoDB这个网上一大堆,可以百度一波。
下面附上mongoDB的配置信息:
仅供参考- - -这是没有密码的连接
连接地址/数据库名字
port为端口号
spring: data: mongodb: uri: mongodb://localhost/llb server: port: 8088
备注
照着这样写可以把MongoBD的数据导出为Excel,如果是多表联合查询的话就只需要更改查询为聚合查询
领附上聚合查询链接:
https://blog.csdn.net/qq_31868149/article/details/82912139
Aggregation-聚合查询
https://www.cnblogs.com/powerwu/articles/9192465.html
还有一些简单的模糊 ,条件查询
MongoDB的初学者可以看一下这个基本的查询语法
https://blog.csdn.net/freeking101/article/details/80795412
MongoDB Shell的语法,还有跟MySQL语法的对比
小结
本人也是第一次写这种文件导出,记录一下方便以后回顾,如果对你们有启发,能帮助到你们那最好啦!!!
最后,有什么问题可以留言,私信我。
- springboot中使用java操作poi案例(excel数据写入与导出)
- springboot 使用poi导出excel文件,及注意项
- SpringMVC/SpringBoot使用easypoi实现Excel文件导入导出功能实现
- C#WinForm 使用StreamWriter导出数据成Excel文件。
- 使用PHP导入Excel和导出数据为Excel文件
- jsp(servlet)使用poi导出excel数据文件
- SpringBoot中使用POI,快速实现Excel导入导出
- Asp.Net MVC 使用FileResult导出Excel数据文件
- 使用DevExpress导出GridControl控件数据到excel文件
- 在使用 ADO.NET 导出 Excel 文件时,设置 IMEX=1 仍不能导出所有数据的解决办法
- 在使用 ADO.NET 导出 Excel 文件时,设置 IMEX=1 仍不能导出所有数据的解决办法
- PHPExcel使用-使用PHPExcel导出文件-导出MySQL数据
- SpringBoot中使用POI,快速实现Excel导入导出
- 使用poi将数据库的数据导出为Excel文件.
- Jeesite(SpringBoot)采用poi实现从数据库提取数据导出为Excel,巨详细!!
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本
- Asp.Net MVC 使用FileResult导出Excel数据文件
- Java 使用jxls导出小数据量excel文件
- 使用POI实现在java程序中导入导出Excel文件数据
- C#WinForm 使用StreamWriter导出数据成Excel文件。