当前位置: 首页 > news >正文

ruoyi-flowable-plus Excel 导入数据 Demo

📁 项目结构简述

ruoyi-flowable-plus 是基于 RuoYi 的扩展项目,使用:

  • 后端:Spring Boot + MyBatis + Flowable
  • 前端:Vue.js

📥 Excel 导入功能 Demo

导入用户数据为例,展示完整导入流程。

✅ 后端实现(Java)

1. Maven 依赖(pom.xml)

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version>
</dependency>

2. 控制器层(UserController.java)

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/import")public AjaxResult importUser(@RequestParam("file") MultipartFile file) {try {List<User> userList = userService.importExcel(file.getInputStream());return AjaxResult.success("导入成功", userService.saveBatch(userList));} catch (Exception e) {return AjaxResult.error("导入失败:" + e.getMessage());}}
}

3. 服务层(UserService.java)

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> importExcel(InputStream inputStream) throws Exception {Workbook workbook = new XSSFWorkbook(inputStream);Sheet sheet = workbook.getSheetAt(0);List<User> list = new ArrayList<>();for (int i = 1; i <= sheet.getLastRowNum(); i++) {Row row = sheet.getRow(i);User user = new User();user.setUserName(getCellValue(row, 0));user.setNickName(getCellValue(row, 1));user.setEmail(getCellValue(row, 2));user.setPassword(getCellValue(row, 3));list.add(user);}return list;}private String getCellValue(Row row, int cellIndex) {Cell cell = row.getCell(cellIndex);if (cell == null) return "";return cell.toString();}public boolean saveBatch(List<User> list) {return userMapper.insertBatch(list) > 0;}
}

4. Mapper 层(UserMapper.java)

public interface UserMapper {int insertBatch(@Param("list") List<User> list);
}

5. Mapper XML(UserMapper.xml)

<insert id="insertBatch">INSERT INTO sys_user (user_name, nick_name, email, password)VALUES<foreach collection="list" item="item" separator=",">(#{item.userName}, #{item.nickName}, #{item.email}, #{item.password})</foreach>
</insert>

✅ 前端实现(Vue.js)

1. 页面组件(user/import.vue)

<template><div><el-uploadaction="/api/user/import":headers="headers":on-success="handleSuccess":on-error="handleError":limit="1"accept=".xlsx,.xls"><el-button type="primary">导入Excel</el-button></el-upload></div>
</template><script>
export default {data() {return {headers: {Authorization: 'Bearer ' + this.$store.getters.token}};},methods: {handleSuccess(response) {this.$message.success("导入成功");console.log(response);},handleError(error) {this.$message.error("导入失败:" + error.message);}}
};
</script>

🧪 示例 Excel 表格格式

用户名昵称邮箱密码
admin管理员admin@example.com123456
user1用户1user1@example.com123456

✅ 总结

模块内容
后端技术Spring Boot + MyBatis + Apache POI
前端技术Vue + Element UI
核心功能Excel 数据导入数据库
示例实体User 对象
示例接口/user/import

提示:如需集成到其他模块(如部门、岗位、流程等),可复用此结构,仅需替换实体类和Mapper。

http://www.xdnf.cn/news/1161073.html

相关文章:

  • 【qml-3】qml与c++交互第二次尝试(类型方式)
  • (9)机器学习小白入门 YOLOv:YOLOv8-cls 技术解析与代码实现
  • uni-app 开发小程序项目中实现前端图片压缩,实现方式
  • Java基础面试题
  • Laravel 后台登录 403 Forbidden 错误深度解决方案-优雅草卓伊凡|泡泡龙
  • 芯谷科技--固定电压基准双运算放大器D4310
  • kafka 日志索引 AbstractIndex
  • 智慧场景:定制开发开源AI智能名片S2B2C商城小程序赋能零售新体验
  • Web开发:ABP框架12——中间件Middleware的创建和使用
  • delphi disqlite3 操作sqlite
  • 通信刚需小能手,devicenet转PROFINET网关兼容物流分拣自动化
  • 【Elasticsearch】IndexModule
  • 【Elasticsearch】BM25的discount_overlaps参数
  • SVM(Support Vector Machine)从入门到精通
  • [Python] -项目实战10- 用 Python 自动化批量重命名文件
  • odoo-059 xml中字段上写 domain 和 filter_domain 什么区别
  • 第三章自定义检视面板_创建自定义编辑器类_如何自定义预览窗口(本章进度5/9)
  • Ubuntu 22.04 安装 Jdk 8和 Tomcat (安装包形式)
  • 基于python django的BOSS直聘网站计算机岗位数据分析与可视化系统,包括薪酬预测及岗位推荐,推荐算法为融合算法
  • Sklearn 机器学习 IRIS数据 理解分类报告
  • Nginx IP授权页面实现步骤
  • 分布在内侧内嗅皮层(MEC)的带状细胞对NLP中的深层语义分析有什么积极的影响和启示
  • Zetane:让深度学习不再抽象,一键3D可视化
  • CFD总压边界条件的理解与开发处理
  • 深入解析 Linux 硬链接与软链接:原理、区别及应用场景
  • 用户虚拟地址空间布局架构
  • C语言:20250721笔记
  • 日历类生辰八字九九三伏入梅出梅算法
  • 【用unity实现100个游戏之34】使用环状(车轮)碰撞器(Wheel Collider)从零实现一个汽车车辆物理控制系统,实现一个赛车游戏
  • PHP反序列化漏洞详解