需要引入依赖:

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency> <!-- 如果要使用 xlsx 和 流,需要引入下面这个包 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>

数据导入:

 @PostMapping("/imp")
public String imp(@RequestPart("filePath") MultipartFile filePath) { //创建一个excel文件
HSSFWorkbook workbook = null;
try { workbook = new HSSFWorkbook(filePath.getInputStream()); //获取文件
Sheet sheet = workbook.getSheetAt(0); //获取第一个工作表 //循环工作表的数据
//getLastRowNum() 获取行
for (int i = 0; i < sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i + 1); //下表是从0开始的所以 把行数设置为第二行从第二行开始读
Cell cell = row.getCell(0); //获取第一个单元格,以此类推
Cell cel2 = row.getCell(1);
Cell cel3 = row.getCell(2);
Cell cel4 = row.getCell(3);
Cell cel5 = row.getCell(4); //获取值
int id = (int) cell.getNumericCellValue();
String name = cel2.toString();
String sex = cel3.toString();
String education = cel4.toString();
int monthly = (int) cel5.getNumericCellValue(); //把值放到对象
Staff staff = new Staff(id, name, sex, education, monthly); //调用mapper进行添加
int count = staffMapper.insert(staff);
if (count > 0) {
System.out.println("上传成功");
}
} } catch (IOException e) {
e.printStackTrace();
}
return "redirect:/emp";
}

数据导出到本地:

  //把数据导出到Excel中
@GetMapping("/exc") public String derive(Model model, HttpSession session) { // 第一步,创建一个webbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook(); // 第二步,在webbook中添加一页,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet("员工表一"); // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow((int) 0); //0代表第一行 // 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER); HSSFCell cell = row.createCell((short) 0);
cell.setCellValue("员工编号");
cell.setCellStyle(style); cell = row.createCell((short) 1);
cell.setCellValue("姓名");
cell.setCellStyle(style); cell = row.createCell((short) 2);
cell.setCellValue("性别");
cell.setCellStyle(style); cell = row.createCell((short) 3);
cell.setCellValue("学历");
cell.setCellStyle(style); cell = row.createCell((short) 4);
cell.setCellValue("月薪");
cell.setCellStyle(style); // 第五步,写入实体数据 实际应用中这些数据从数据库得到,
List<Staff> list = staffMapper.selectAll();
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow((int) i + 1);
// 第四步,创建单元格,并设置值
row.createCell((short) 0).setCellValue(list.get(i).getId());
row.createCell((short) 1).setCellValue(list.get(i).getName());
row.createCell((short) 2).setCellValue(list.get(i).getSex());
row.createCell((short) 3).setCellValue(list.get(i).getEducation());
row.createCell((short) 4).setCellValue(list.get(i).getMonthly());
}
// 第六步,将文件存到指定位置
try {
FileOutputStream fout = new FileOutputStream("E:\\aaa.xls");
wb.write(fout);
fout.close();
} catch (Exception e) {
e.printStackTrace();
}
session.setAttribute("add","数据导出成功");
return "redirect:/emp";
}

可以结合 SpringMVC 的上传下载使用

@Controller
public class ExcelController {
@Autowired
private ExcelService excelService; @GetMapping(value = "/excel_download")
ResponseEntity<byte[]> downloadFile() throws IOException {
byte[] contents = excelService.exportExcel().toByteArray(); HttpHeaders headers = new HttpHeaders();
headers.setCacheControl("no-cache, no-store, must-revalidate");
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentLength(contents.length);
headers.setContentDispositionFormData("attachment", "xxx_" + new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()) + ".xls"); return ResponseEntity.ok().headers(headers).body(contents);
}
}

java中 Excel表实现数据导入导出的更多相关文章

  1. 1、数据库与excel表格的数据导入导出

    1.居民用户界面中,excel数据导入导出: 2.其他5张表数据显示到本角色主页的container容器中.

  2. java实现excel与mysql的导入导出

    注意:编码前先导入poi相关jar包 1 /** * 读excel 到list * * @param file excel file * @param fields 字段数组 * @return * ...

  3. java中通过jacob调用dts进行数据导入导出

    在一个项目中需要金蝶软件对接,但是业务服务器和财务服务器相隔很远(中间经过好几台服务器,有内网也有外网),从一个内网向另一个内网中传输时,需要外网辅助,因为不让原始数据受污染,使用了DTS数据同步到另 ...

  4. ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成

    一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...

  5. Access中一句查询代码实现Excel数据导入导出

    摘 要:用一句查询代码,写到vba中实现Excel数据导入导出,也可把引号中的SQL语句直接放到查询分析器中执行正 文: 导入数据(导入数据时第一行必须是字段名): DoCmd.RunSQL &quo ...

  6. Java实现大批量数据导入导出(100W以上) -(三)超过25列Excel导出

    前面一篇文章介绍大数据量导出实现: Java实现大批量数据导入导出(100W以上) -(二)导出 这篇文章在Excel列较少时,按以上实际验证能很快实现生成.但如果列较多时用StringTemplat ...

  7. ssm框架之将数据库的数据导入导出为excel文件

    在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...

  8. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)      select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) ...

  9. Java实现大批量数据导入导出(100W以上) -(二)导出

    使用POI或JXLS导出大数据量(百万级)Excel报表常常面临两个问题: 1. 服务器内存溢出: 2. 一次从数据库查询出这么大数据,查询缓慢. 当然也可以分页查询出数据,分别生成多个Excel打包 ...

随机推荐

  1. MyBatis删除多个类型不一致或不在同一个对象中参数的记录

    控制层中: // 根据店家id查找图书,已售数量要大于等于1才显示 List<SoldBook> sbList = shopService.getSoldBookByShopidAndBo ...

  2. 缓存机制总结(JVM内置缓存机制,MyBatis和Hibernate缓存机制,Redis缓存)

    一.JVM内置缓存(值存放在JVM缓存中) 我们可以先了解一下Cookie,Session,和Cache Cookie:当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cooki ...

  3. websocket之拨云见雾

    websocket是基于http相应的特性弥补其不足(就是个socket,不再是一次请求一次相应) 但缺点就是只有在版本较高的浏览器才支持websocket. 浏览器: <script type ...

  4. JavaNIO

    Java New IO 简称 nio,在jdk1.4提供了新的api,有如下特性: 1.为所有原始类型提供缓存支持 2.字符集编解码解决方案 3.Channel:新的原始io抽象 4.支持锁和内存映射 ...

  5. Find the hotel HDU - 3193 (ST表RMQ)

    Summer again! Flynn is ready for another tour around. Since the tour would take three or more days, ...

  6. token和sign

    前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...

  7. Codeforces 919 行+列前缀和 树上记忆化搜索(树形DP)

    A B C #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) ...

  8. 清楚webView的缓存

    +(void)clearCache{    NSHTTPCookie *cookie;    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage s ...

  9. linux shell getopt

    linux shell命令行选项与参数用法详解--getopts.getopt https://www.jianshu.com/p/6393259f0a13

  10. 上传大文件(100G)的解决方案

    4GB以上超大文件上传和断点续传服务器的实现 随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求. 但是在很多情况下,平台运营方并没有大文件上 ...