1.导入依赖

2.application.properties只需要数据库连接信息就可以

3.目录结构 有个没用的service,请忽略

4.Controller,因为入门列子,所以简单的导出 导入读取数据都是可以的

贴上代码-》

  1. package com.idress.action;
  2. import com.idress.entity.User;
  3. import com.idress.service.UserService;
  4. import com.idress.utils.ExcelUtils;
  5. import org.apache.poi.hpsf.DocumentSummaryInformation;
  6. import org.apache.poi.hpsf.SummaryInformation;
  7. import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Controller;
  10. import org.springframework.web.bind.annotation.*;
  11. import org.apache.poi.hssf.usermodel.HSSFCell;
  12. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  13. import org.apache.poi.hssf.usermodel.HSSFDataFormat;
  14. import org.apache.poi.hssf.usermodel.HSSFFont;
  15. import org.apache.poi.hssf.usermodel.HSSFRow;
  16. import org.apache.poi.hssf.usermodel.HSSFSheet;
  17. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  18. import org.springframework.web.multipart.MultipartFile;
  19. import javax.servlet.http.HttpServletResponse;
  20. import java.io.FileOutputStream;
  21. import java.io.IOException;
  22. import java.io.OutputStream;
  23. import java.net.URLEncoder;
  24. import java.util.ArrayList;
  25. import java.util.Date;
  26. import java.util.List;
  27. @Controller
  28. public class ExcelController {
  29. @Autowired
  30. private UserService userService;
  31. @RequestMapping("/")
  32. public String toIndex(){
  33. return "poi";
  34. }
  35. @RequestMapping("/excel/upload")
  36. public String fileUpload(@RequestParam("file") MultipartFile file) throws IOException {
  37. if(!ExcelUtils.validateExcel(file.getOriginalFilename())){
  38. System.out.println("文件必须是excel!");
  39. return null;
  40. }
  41. long size=file.getSize();
  42. if(file.getOriginalFilename()==null || file.getOriginalFilename().equals("") || size==0){
  43. System.out.println("文件不能为空");
  44. return null;
  45. }
  46. HSSFWorkbook workbook = new HSSFWorkbook(new POIFSFileSystem(file.getInputStream()));
  47. int numberOfSheets = workbook.getNumberOfSheets();//获得有多少sheet
  48. HSSFSheet sheet = workbook.getSheetAt(0);//默认只有一个sheet
  49. int rows = sheet.getPhysicalNumberOfRows();//获得sheet有多少行
  50. //遍历行
  51. for (int j = 0; j < rows; j++) {
  52. if (j == 0) {
  53. continue;//标题行(省略)
  54. }
  55. HSSFRow row = sheet.getRow(j);
  56. for (int k = 0; k < row.getPhysicalNumberOfCells(); k++) {
  57. HSSFCell cell = row.getCell(k);
  58. System.out.println(cell.toString());
  59. }
  60. }
  61. return "poi";
  62. }
  63. //生成user表excel
  64. @GetMapping(value = "/excel/getUser")
  65. @ResponseBody
  66. public String getUser(HttpServletResponse response) throws Exception{
  67. HSSFWorkbook workbook = new HSSFWorkbook();
  68. HSSFSheet sheet = workbook.createSheet("统计表");
  69. createTitle(workbook,sheet);
  70. List<User> rows = new ArrayList<>();//userService.getAll();
  71. rows.add(new User("1","小明","牛逼",new Date()));
  72. rows.add(new User("2","中明","牛2逼",new Date()));
  73. //设置日期格式
  74. HSSFCellStyle style = workbook.createCellStyle();
  75. style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
  76. //新增数据行,并且设置单元格数据
  77. int rowNum=1;
  78. for(User user:rows){
  79. HSSFRow row = sheet.createRow(rowNum);
  80. row.createCell(0).setCellValue(user.getId());
  81. row.createCell(1).setCellValue(user.getName());
  82. row.createCell(2).setCellValue(user.getUsername());
  83. HSSFCell cell = row.createCell(3);
  84. cell.setCellValue(user.getCreate_time());
  85. cell.setCellStyle(style);
  86. rowNum++;
  87. }
  88. String fileName = "导出excel例子.xls";
  89. //生成excel文件
  90. buildExcelFile(fileName, workbook);
  91. //浏览器下载excel
  92. buildExcelDocument(fileName,workbook,response);
  93. return "download excel";
  94. }
  95. //创建表头
  96. private void createTitle(HSSFWorkbook workbook,HSSFSheet sheet){
  97. HSSFRow row = sheet.createRow(0);
  98. //设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
  99. sheet.setColumnWidth(1,12*256);
  100. sheet.setColumnWidth(3,17*256);
  101. //设置为居中加粗
  102. HSSFCellStyle style = workbook.createCellStyle();
  103. HSSFFont font = workbook.createFont();
  104. font.setBold(true);
  105. //style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  106. style.setFont(font);
  107. HSSFCell cell;
  108. cell = row.createCell(0);
  109. cell.setCellValue("ID");
  110. cell.setCellStyle(style);
  111. cell = row.createCell(1);
  112. cell.setCellValue("显示名");
  113. cell.setCellStyle(style);
  114. cell = row.createCell(2);
  115. cell.setCellValue("用户名");
  116. cell.setCellStyle(style);
  117. cell = row.createCell(3);
  118. cell.setCellValue("创建时间");
  119. cell.setCellStyle(style);
  120. }
  121. //生成excel文件
  122. protected void buildExcelFile(String filename,HSSFWorkbook workbook) throws Exception{
  123. FileOutputStream fos = new FileOutputStream(filename);
  124. workbook.write(fos);
  125. fos.flush();
  126. fos.close();
  127. }
  128. //浏览器下载excel
  129. protected void buildExcelDocument(String filename,HSSFWorkbook workbook,HttpServletResponse response) throws Exception{
  130. response.setContentType("application/vnd.ms-excel");
  131. response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename, "utf-8"));
  132. OutputStream outputStream = response.getOutputStream();
  133. workbook.write(outputStream);
  134. outputStream.flush();
  135. outputStream.close();
  136. }
  137. }

实体类:

  1. import java.util.Date;
  2. public class User {
  3. private String id;
  4. private String name;
  5. private String username;
  6. private Date create_time;
  7. public User() {
  8. }
  9. public User(String id, String name, String username, Date create_time) {
  10. this.id = id;
  11. this.name = name;
  12. this.username = username;
  13. this.create_time = create_time;
  14. }
  15. public String getId() {
  16. return id;
  17. }
  18. public void setId(String id) {
  19. this.id = id;
  20. }
  21. public String getName() {
  22. return name;
  23. }
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27. public String getUsername() {
  28. return username;
  29. }
  30. public void setUsername(String username) {
  31. this.username = username;
  32. }
  33. public Date getCreate_time() {
  34. return create_time;
  35. }
  36. public void setCreate_time(Date create_time) {
  37. this.create_time = create_time;
  38. }
  39. }

上传文件用来读取数据的html(使用了thymeleaf)

  1. <!DOCTYPE html>
  2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <base th:href="${#httpServletRequest.getContextPath()+'/'}">
  5. <meta charset="UTF-8">
  6. <title>导入Excel数据</title>
  7. </head>
  8. <body>
  9. <h1>这是用户信息页</h1>
  10. <form action="excel/upload" method="post" enctype="multipart/form-data">
  11. <input name="file" type="file" />
  12. <input type="submit"/>
  13. </form>
  14. </body>
  15. </html>

poi整合springboot超简单入门例子的更多相关文章

  1. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  2. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

  3. GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...

  4. ECharts.js 超简单入门(本质canvas)

    ECharts.js 超简单入门(本质canvas) 一.总结 一句话总结:echarts这些图标的本质都是canvas. 二.ECharts.js学习(一) 简单入门 EChart.js 简单入门 ...

  5. springboot websocket 简单入门

    在没有WebSocket时,大多时候我们在处理服务端主动给浏览器推送消息都是非常麻烦,且有很多弊端,如: 1.Ajax轮循 优点:客户端很容易实现良好的错误处理系统和超时管理,实现成本与Ajax轮询的 ...

  6. RestfulAPI超简单入门

    简单入门 REST -- REpresentational State Transfer,英语的直译就是"表现层状态转移" 是目前最流行的 API 设计规范,用于 Web 数据接口 ...

  7. 超简单入门Vuex小示例

    写在前面 本文旨在通过一个简单的例子,练习vuex的几个常用方法,使初学者以最快的速度跑起来一个vue + vuex的示例. 学习vuex需要你知道vue的一些基础知识和用法.相信点开本文的同学都具备 ...

  8. 基于vue-cli、elementUI的Vue超简单入门小例子

    - 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. - 开始写例子之前,先对环境的部署做点简单的介绍,其实和Vue官方的差不多. #如若没有安装过vu ...

  9. SpringBoot之简单入门

    一,spring boot 是什么? spring boot的官网是这样说的: Spring Boot makes it easy to create stand-alone, production- ...

随机推荐

  1. C#foreach 本质( 鸭子类型遍历)

    探讨关于C#中Foreach的本质 要实现foreach需要满足什么条件? 只要类中实现类中的GetEnumerator()方法.MoveNext()方法.Current属性(俗称鸭子类型)都可以使用 ...

  2. JAVA变量的命名规范

    所有变量.方法.类名:见名知意 类成员变量:首字母小写和驼峰原则:monthSalary 局部变量:首字母小写和驼峰原则 常量:大写字母和下划线:MAX_VALUE 类名:首字母大写和驼峰原则:Man ...

  3. .Net Core中无处不在的Async/Await是如何提升性能的?

    一.简介 Async/Await在.Net Core中真的是无处不在,到处都是异步操作,那为什么要用?有什么作用?别人说能提升性能?网上一堆文章看的绕晕了也没说清楚, 所以这里从理论,实践,原理一个个 ...

  4. JAVA_Scanner 键盘输入

    键盘输入语句 介绍:在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取.Input.java , 需要一个 扫描器(对象), 就是 Scanner 步骤: 导入该类的所在包, java.u ...

  5. C#读写自定义的多字段配置文件

    mark一下,日后填坑 参考: WPF 读写自己写的配置文件

  6. Linux下配置远程免密登录

    第一步: 输入ssh-keygen: [root@localhost zookeeper-3.5.7]# ssh-keygen Generating public/private rsa key pa ...

  7. Spark ML源码分析之三 分类器

            前面跟大家扯了这么多废话,终于到具体的机器学习模型了.大部分机器学习的教程,总要从监督学习开始讲起,而监督学习的众多算法当中,又以分类算法最为基础,原因在于分类问题非常的单纯直接,几乎 ...

  8. go1.18泛型的简单尝试

    今天golang终于发布了1.18版本,这个版本最大的一个改变就是加入了泛型.虽然没有在beta版本的时候尝试泛型,但是由于在其他语言的泛型经验,入手泛型不是件难事~ 官方示例 Tutorial: G ...

  9. github:git clone下载加速以及vim-plug下载插件加速

    git clone 下载加速 1. 先在github将仓库地址复制下来 2. git clone时将https://github.com/* 改为https://gitclone.com/github ...

  10. Qt记事本,美化版

    主体代码实现 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QMenu> ...