整理下之前写的导入导出,以便以后使用。

后端引入依赖

        <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 导入导出相关推荐

  1. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  2. nodejs excel导入导出

    nodejs excel导入导出 用excel-export包导出 1安装excel-export 2自定义exportExcel函数封装 3业务使用 excel导入 1需要安装的包 2前端代码示例 ...

  3. 注解+反射优雅的实现Excel导入导出(通用版)

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/youzi1394046585/ article/details/86670203 日常在做后 ...

  4. java超级简单到爆的Excel导入导出(easypoi)

    场景: 在日常工作中,excel导入导出,是十分常见的,有两种主流的技术,一种是jxl,另一种是poi,而easypoi就是对poi进行了封装,使得导入导出变得更加的简单,阿里巴巴也有封装的工具名叫E ...

  5. easyexcel 设置标题_EasyExcel,让 excel 导入导出更加简单

    做积极的人,而不是积极废人! 来源:jianshu.com/p/8f3defdc76d4EasyExcelGitHub上的官方说明快速开始maven仓库地址导入导出总结 EasyExcel 在做exc ...

  6. excel winform 导入 导出_强大的 Excel 导入导出工具 hutool

    " 最近项目上需要用到 Excel 的导入导出功能,想着之前使用的都有点麻烦,所以结合多方资料,终于找到了这个还算不错的 Excel 处理工具,一起来看" 今日安利好物名为 Hut ...

  7. easypoi 多sheet导入_程序员接私活利器 玩转excel导入导出

    为什么会写Easypoi 以前的以前(岁月真TMD的快)我虽然写了不少代码但还是很少写poi,然后跳到一家公司之后就和业务人员聊上了,来这个需要个报表,这个报表样式是这样的,这个表头是这样的,就这样我 ...

  8. SpringBoot集成EasyPoi实现Excel导入导出

    作者介绍: 本人Java特工,代号:Cris Li : 中文名:克瑞斯理 简书地址: 消失的码农 - 简书 CSDN地址: https://blog.csdn.net/jianli95 个人纯洁版博客 ...

  9. SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!

    在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表.你肯定听说过POI这个东西,可以实现.但是POI实现的API确实很麻烦,它需要写那种逐行解析的代码(类 ...

最新文章

  1. JAVA的静态代理与动态代理比较--转载
  2. 【NLP傻瓜式教程】手把手带你CNN文本分类(附代码)
  3. PAT_B_1092_Java(15分)_C++(20分)
  4. Linux 命令之 rsync -- 远程数据同步工具
  5. 支付宝回调地址index.php,支付宝支付成功回调地址怎么不改变当前页面?
  6. java断点续传 http_http断点续传简单实现(java)
  7. 优秀行业网站建设5必备(上)
  8. Spring Boot与JWT整合实现前后端分离的用户认证
  9. win7记事本txt图标显示异常解决方法
  10. intelj idea安装和配置
  11. 40岁,将站到哪里(转)
  12. 开源GIS(三)——openlayers地图基本框架与天地图加载
  13. L1-029. 是不是太胖了
  14. linux设备/驱动的注册
  15. 网络爬虫与HTTP协议
  16. mpvue微信小程序引入腾讯地图sdk
  17. 有关likely和unlikely??
  18. 航天恒星系统集成项目组
  19. linux系统取消自检,Linux 磁盘自检设置
  20. Excise_day02

热门文章

  1. 关于STM32CubeMX软件画面重影问题
  2. java中匿名类例题的简要分析
  3. Python基础入门----基本数据类型上
  4. 别生闷气了,真的会死!
  5. oracle复制粘贴不好使,Oracle SQL Developer 编辑区不能删除,后退,空格,复制粘贴等功能都失效的解决办法...
  6. zsh: command not found:XXX
  7. 团队执行力不够,到底是谁的错?
  8. 如何退出PPT文件的“只读模式”?
  9. 面向对象编程-鸵鸟到底是不是鸟?企鹅是不是鸟?
  10. STM32微控制器 | 复习九 | ADC原理及应用