package com.yyqq.exceldemo.controller;
import com.alibaba.excel.EasyExcel;
import com.yyqq.exceldemo.model.UserData;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@RestController
public class ExcelController {
/**
* 导入execl文件
*/
@GetMapping("/export")
public ResponseEntity<byte[]> exportExcel() {
String fileName = "用户数据.xlsx";
List<UserData> userList = generateUserData();
// EasyExcel 写入到字节数组
byte[] bytes = exportToExcel(userList);
// 设置响应头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", fileName);
return ResponseEntity.ok()
.headers(headers)
.body(bytes);
}
@PostMapping("/import")
public String importExcel(@RequestParam("file") MultipartFile file) {
try {
InputStream inputStream = file.getInputStream();
// 使用 EasyExcel 读取 Excel 数据
List<UserData> userList = EasyExcel.read(inputStream)
.head(UserData.class)
.sheet()
.doReadSync();
// 处理导入的数据,例如保存到数据库
processUserData(userList);
return "导入成功,共导入 " + userList.size() + " 条数据";
} catch (Exception e) {
e.printStackTrace();
return "导入失败: " + e.getMessage();
}
}
/**
* 模拟生产用户数据
* @return
*/
private List<UserData> generateUserData() {
List<UserData> list = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
UserData user = new UserData();
user.setId(i);
user.setName("用户" + i);
user.setAge(20 + i % 30);
user.setEmail("user" + i + "@example.com");
list.add(user);
}
return list;
}
/**
* 将数据导出至byte数组中
*/
private byte[] exportToExcel(List<UserData> userList) {
// 使用 EasyExcel 写入 Excel 到字节数组
ByteArrayOutputStream out = new ByteArrayOutputStream();
EasyExcel.write(out, UserData.class)
.sheet("用户数据")
.doWrite(userList);
return out.toByteArray();
}
/**
* 导入数据方法
*/
private List<UserData> importFromExcelWithPOI(MultipartFile file) {
List<UserData> userList = new ArrayList<>();
try (InputStream inputStream = file.getInputStream();
Workbook workbook = WorkbookFactory.create(inputStream)) {
Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> iterator = sheet.iterator();
// 跳过表头
if (iterator.hasNext()) {
iterator.next();
}
while (iterator.hasNext()) {
Row row = iterator.next();
UserData user = new UserData();
user.setId((int) row.getCell(0).getNumericCellValue());
user.setName(row.getCell(1).getStringCellValue());
user.setAge((int) row.getCell(2).getNumericCellValue());
user.setEmail(row.getCell(3).getStringCellValue());
userList.add(user);
}
} catch (Exception e) {
e.printStackTrace();
}
return userList;
}
private void processUserData(List<UserData> userList) {
// 这里可以添加将数据保存到数据库的逻辑
// 例如使用 JPA 或 MyBatis 等持久层框架
userList.forEach(user -> {
// 模拟保存操作
System.out.println("保存用户: " + user);
});
}
}
孤蓬&听雨
- 粉丝: 2w+
- 资源: 404
最新资源
- 基于大数据技术的工程项目管理架构研究与应用
- dcs111_ui_auto.zip
- Java学生信息管理系统GUI界面+MySQL数据库+实训报告(高分项目)
- 电梯壁板自动涂胶装配生产线sw19可编辑全套技术资料100%好用.zip
- #MATLAB模拟电磁波在自由空间中传播,基于FDTD方法编写,采用ABC边界,激励源选择正弦脉冲脉冲 #程序包含详细注释,本人在2020a版本均可运行
- java学生信息管理系统(GUI+javaSwing+MySQL)源码+报告
- 动力电池及电池管理系统BMS(stp+cad+资料)全套技术资料100%好用.zip
- 无人艇、无人船usv nmpc预测控制,有详细的代码解释 能够实现动态避障都有详细的注释和代码 几乎每行都有 需要下载matlab以及casadi求解器,不然无法求解 仿真对象无人艇:WAM
- Java+Swing+Mysql实现学生信息管理系统源码+数据库+报告文档
- 二工位半自动灌袋机sw20可编辑全套技术资料100%好用.zip
- 经典的FC游戏SD快打旋风
- win32汇编环境,对话框程序源码模版
- 一款非常昂贵的java支付系统源码分享给大家学习,附带完整的安装教程和步骤-非常昂贵完善的支付,代付,收银系统java版-优雅草片翼
- Matlab计算齿轮啮合刚度计算,包括赫兹刚度弯曲刚度等子程序 以及六自由度齿轮系统动力学响应计算
- 电梯控制柜测试柜sw19可编辑全套技术资料100%好用.zip
- Multimodal Deep Learning
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈