后端实现Excel 导入导出
整理下之前写的导入导出,以便以后使用。
后端引入依赖
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.16</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.16</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.16</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.16</version></dependency>
一个工具函数:
package com.lanje.game.utils;import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;
import java.util.Date;public class ExcelUtils {private final static String Excel_2003 = ".xls"; //2003 版本的excelprivate final static String Excel_2007 = ".xlsx"; //2007 版本的excelpublic static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {Workbook work = null;String fileType = fileName.substring(fileName.lastIndexOf("."));if(Excel_2003.equals(fileType)){work=new HSSFWorkbook(inStr);//2003 版本的excel}else if(Excel_2007.equals(fileType)) {work=new XSSFWorkbook(inStr);//2007 版本的excel}else {throw new Exception("解析文件格式有误!");}return work;}public static Workbook getWorkbook(MultipartFile file) throws IOException {String fileName = file.getOriginalFilename();String suffx = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();Object workbook;if ("xls".equals(suffx)) {workbook = new HSSFWorkbook(file.getInputStream());} else {if (!"xlsx".equals(suffx)) {throw new IOException("名称为[" + fileName + "]的文件不是excel文件");}workbook = new XSSFWorkbook(file.getInputStream());}return (Workbook)workbook;}public static String getString(Cell cell) {if (cell==null){return null;}try{return cell.getStringCellValue();}catch (Exception e){double numericCellValue = cell.getNumericCellValue();return String.valueOf(numericCellValue);}}public static Date getDate(Cell cell) {int cellType = cell.getCellType();if (cellType ==0){return cell.getDateCellValue();}else{return null;}}
}
这个工具函数里面是一些转流操作和取值操作, 取值时getString 最常用,写成了string和num 都一起读的,getDate 专门读日期
读取excel 代码:
@PostMapping(value = "/api/{id}/import/excel")public String vuImport(@RequestParam MultipartFile file , @PathVariable Integer id) throws IOException {return gameServicce.importExcel(id,file);}
public String importExcel(Integer id, MultipartFile file) throws IOException {Workbook work = ExcelUtils.getWorkbook(file);if(work == null) {throw new IOException("创建Excel工作簿为空!");}Sheet sheet = work.getSheetAt(0);Row row = sheet.getRow(1);Map<Integer ,String> rowMap = new HashMap<>();for (int i = 2;i<row.getLastCellNum();i++){String string = ExcelUtils.getString(row.getCell(i));rowMap.put(i,string);}for (int i = 2;i<sheet.getLastRowNum();i++){row = sheet.getRow(i);for (int j = 2;j<row.getLastCellNum();j++){if (!rowMap.containsKey(j)){continue;}if (row.getCell(j)==null){continue;}String string = ExcelUtils.getString(row.getCell(j));if (string.equals("")){continue;}else{//todoSystem.out.printf(string);}//todo}}return "import Excel success";}
很基础的下载模板接口
代码:
@GetMapping("/api/download/template/{name}")public void downModel(HttpServletResponse response , @PathVariable String name) {InputStream in = null;OutputStream out = null;try {response.setContentType("application/force-download");response.setHeader("Content-Disposition", "attachment;fileName=" + new String("model.xlsx"));out = response.getOutputStream();in = this.getClass().getClassLoader().getResourceAsStream("templates/" + name+".xlsx");int ch;while ((ch = in.read()) != -1) {out.write(ch);}} catch (Exception e) {e.printStackTrace();}}
导出一个自己定义的excel
@GetMapping("/api/export/excel")public void exportExcel(HttpServletResponse response ) {try {response.setContentType("application/force-download");response.setHeader("Content-Disposition", "attachment;fileName=" + new String("xxxccc.xlsx"));OutputStream out = response.getOutputStream();Workbook work = new XSSFWorkbook();Sheet sheet = work.createSheet("No.1");Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("第一行第一列");Cell cell1 = row.createCell(1);cell1.setCellValue("第一行第2列");work.write(out);} catch (Exception e) {e.printStackTrace();}}
后端实现Excel 导入导出相关推荐
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...
- nodejs excel导入导出
nodejs excel导入导出 用excel-export包导出 1安装excel-export 2自定义exportExcel函数封装 3业务使用 excel导入 1需要安装的包 2前端代码示例 ...
- 注解+反射优雅的实现Excel导入导出(通用版)
以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/youzi1394046585/ article/details/86670203 日常在做后 ...
- java超级简单到爆的Excel导入导出(easypoi)
场景: 在日常工作中,excel导入导出,是十分常见的,有两种主流的技术,一种是jxl,另一种是poi,而easypoi就是对poi进行了封装,使得导入导出变得更加的简单,阿里巴巴也有封装的工具名叫E ...
- easyexcel 设置标题_EasyExcel,让 excel 导入导出更加简单
做积极的人,而不是积极废人! 来源:jianshu.com/p/8f3defdc76d4EasyExcelGitHub上的官方说明快速开始maven仓库地址导入导出总结 EasyExcel 在做exc ...
- excel winform 导入 导出_强大的 Excel 导入导出工具 hutool
" 最近项目上需要用到 Excel 的导入导出功能,想着之前使用的都有点麻烦,所以结合多方资料,终于找到了这个还算不错的 Excel 处理工具,一起来看" 今日安利好物名为 Hut ...
- easypoi 多sheet导入_程序员接私活利器 玩转excel导入导出
为什么会写Easypoi 以前的以前(岁月真TMD的快)我虽然写了不少代码但还是很少写poi,然后跳到一家公司之后就和业务人员聊上了,来这个需要个报表,这个报表样式是这样的,这个表头是这样的,就这样我 ...
- SpringBoot集成EasyPoi实现Excel导入导出
作者介绍: 本人Java特工,代号:Cris Li : 中文名:克瑞斯理 简书地址: 消失的码农 - 简书 CSDN地址: https://blog.csdn.net/jianli95 个人纯洁版博客 ...
- SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!
在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表.你肯定听说过POI这个东西,可以实现.但是POI实现的API确实很麻烦,它需要写那种逐行解析的代码(类 ...
最新文章
- JAVA的静态代理与动态代理比较--转载
- 【NLP傻瓜式教程】手把手带你CNN文本分类(附代码)
- PAT_B_1092_Java(15分)_C++(20分)
- Linux 命令之 rsync -- 远程数据同步工具
- 支付宝回调地址index.php,支付宝支付成功回调地址怎么不改变当前页面?
- java断点续传 http_http断点续传简单实现(java)
- 优秀行业网站建设5必备(上)
- Spring Boot与JWT整合实现前后端分离的用户认证
- win7记事本txt图标显示异常解决方法
- intelj idea安装和配置
- 40岁,将站到哪里(转)
- 开源GIS(三)——openlayers地图基本框架与天地图加载
- L1-029. 是不是太胖了
- linux设备/驱动的注册
- 网络爬虫与HTTP协议
- mpvue微信小程序引入腾讯地图sdk
- 有关likely和unlikely??
- 航天恒星系统集成项目组
- linux系统取消自检,Linux 磁盘自检设置
- Excise_day02
热门文章
- 关于STM32CubeMX软件画面重影问题
- java中匿名类例题的简要分析
- Python基础入门----基本数据类型上
- 别生闷气了,真的会死!
- oracle复制粘贴不好使,Oracle SQL Developer 编辑区不能删除,后退,空格,复制粘贴等功能都失效的解决办法...
- zsh: command not found:XXX
- 团队执行力不够,到底是谁的错?
- 如何退出PPT文件的“只读模式”?
- 面向对象编程-鸵鸟到底是不是鸟?企鹅是不是鸟?
- STM32微控制器 | 复习九 | ADC原理及应用