java中 Excel表实现数据导入导出
需要引入依赖:
<!-- 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、数据库与excel表格的数据导入导出
1.居民用户界面中,excel数据导入导出: 2.其他5张表数据显示到本角色主页的container容器中.
- java实现excel与mysql的导入导出
注意:编码前先导入poi相关jar包 1 /** * 读excel 到list * * @param file excel file * @param fields 字段数组 * @return * ...
- java中通过jacob调用dts进行数据导入导出
在一个项目中需要金蝶软件对接,但是业务服务器和财务服务器相隔很远(中间经过好几台服务器,有内网也有外网),从一个内网向另一个内网中传输时,需要外网辅助,因为不让原始数据受污染,使用了DTS数据同步到另 ...
- ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成
一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...
- Access中一句查询代码实现Excel数据导入导出
摘 要:用一句查询代码,写到vba中实现Excel数据导入导出,也可把引号中的SQL语句直接放到查询分析器中执行正 文: 导入数据(导入数据时第一行必须是字段名): DoCmd.RunSQL &quo ...
- Java实现大批量数据导入导出(100W以上) -(三)超过25列Excel导出
前面一篇文章介绍大数据量导出实现: Java实现大批量数据导入导出(100W以上) -(二)导出 这篇文章在Excel列较少时,按以上实际验证能很快实现生成.但如果列较多时用StringTemplat ...
- ssm框架之将数据库的数据导入导出为excel文件
在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...
- SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
* 说明:复制表(只复制结构,源表名:a 新表名:b) select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) ...
- Java实现大批量数据导入导出(100W以上) -(二)导出
使用POI或JXLS导出大数据量(百万级)Excel报表常常面临两个问题: 1. 服务器内存溢出: 2. 一次从数据库查询出这么大数据,查询缓慢. 当然也可以分页查询出数据,分别生成多个Excel打包 ...
随机推荐
- 如何快速的查找服务所在的进程id?
执行 pgrep -l 服务名称 这里以查找redis所在的进程id为例 执行 pgrep -l redis 从图中可知进程id 为30058
- 本地安装node.js模块
一.需求 单位电脑不让上网,但是需要用到一个node.js模块,elasticdump. 二.解决 1.自己电脑上下载模块: npm install elasticdump -g 注意:必须要加 -g ...
- js包装类型的装箱拆箱
https://www.jb51.net/article/155820.htm https://juejin.im/post/5cbaf130518825325050fb0a https://juej ...
- Spring-data-jpa n+1问题
Spring-data-jpa的n+1问题 当我们使用JPA提供给我们的find方法时,如果查询出来的对象关联着另外10个对象,那么JPA将会发送1+10次查询(这个对象本身要查询一次,然后每个关联对 ...
- 七、设备驱动中的阻塞与非阻塞 IO(二)
7.2 轮询 7.2.1 介绍 在用户程序中的 select() 和 poll() 函数最终会使设备驱动中的 poll() 函数被执行. 设备驱动程序中的轮询函数原型: /** 用于询问设备是否可以非 ...
- Spring框架几种创建bean的方式
Spring框架下,Bean的创建和装配非常的灵活,提供了三种主要的方式,并且相互见可以互相看见,也就是你可以随意地采用你喜欢且合适的方式创建Bean,而不用担心他们之间的兼容问题. 一.使用XML显 ...
- windows中ftp下载脚本(bat+vb)
做了个ftp下载脚本: ftpdownload.bat @rem 注释:从ftp服务器每小时下载北向性能文件的脚本 @rem 用vb脚本取昨天 for /f %%a in ('cscript //no ...
- 微信小程序横向滚动正确姿势
<1>xml文件 <view> <scroll-view scroll-x class="scroll-header"> <view cl ...
- spring boot 2.0(三)使用docker部署springboot
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...
- linux常用基本命令不全
pwd 显示当前目录 ls -lh 显示文件列表,h表示会显示文件的大小 mkdir zhu 创建文件夹zhu rmdir zhu 移除文件夹zhu如果abc中含有其他文件,则不能删除 rm -r ...