JAVA POI通用Excel导入模板

  • Excel导入模板类

Excel导入模板类

package com.golte.dataform.analysis.controller;import com.alibaba.fastjson.JSON;
import com.golte.common.GlobalResponse;
import com.golte.dataform.analysis.vo.response.project.ProjectBaseInfoResp;
import com.golte.utils.DateUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;public class ProjectBasicInfoExcel {private static String getValue(XSSFCell xssfCell) {if (Objects.isNull(xssfCell)) {return null;}if (xssfCell.getCellType() == CellType.BOOLEAN) {return String.valueOf(xssfCell.getBooleanCellValue());}if (xssfCell.getCellType() == CellType.NUMERIC) {return String.valueOf(xssfCell.getNumericCellValue());}return String.valueOf(xssfCell);}@GetMapping("/downTemplate")@ApiOperation("下载模板")public void downTemplate(HttpServletResponse response) throws IOException {String time = DateUtils.dateTime2Str(DateUtils.DATE_PATTERN_DEFAULT, new Date());String fileUrl = "test.xlsx";ServletOutputStream out = null;InputStream iputstream = null;try {//读取文件服务器模板URL url = new URL(fileUrl);HttpURLConnection uc = (HttpURLConnection) url.openConnection();uc.setDoInput(true); //设置是否要从 URL 连接读取数据,默认为trueuc.connect();iputstream = uc.getInputStream();String fileName = time + "基础信息导入模板.xls";String[] array = fileName.split("[.]");String fileType = array[array.length - 1].toLowerCase();//设置文件ContentType类型if ("jpg,jepg,gif,png".contains(fileType)) {//图片类型response.setContentType("image/" + fileType);} else if ("pdf".contains(fileType)) {//pdf类型response.setContentType("application/pdf");} else {//自动判断下载文件类型response.setContentType("multipart/form-data");}response.setContentType("application/octet-stream;charset=utf-8");//设置文件头:最后一个参数是设置下载文件名response.setHeader("Content-Disposition","attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));out = response.getOutputStream();// 读取文件流int len;byte[] buffer = new byte[1024 * 10];while ((len = iputstream.read(buffer)) != -1) {out.write(buffer, 0, len);}if (Objects.nonNull(out)) {out.flush();}} catch (IOException e) {} finally {try {if (Objects.nonNull(out)) {out.close();}if (Objects.nonNull(iputstream)) {iputstream.close();}} catch (IOException e) {}}}@PostMapping("/excelImport")@ApiOperation("项目基础信息")public GlobalResponse<List<String>> excelImport(@RequestParam("file") MultipartFile file) {//查询数据库中是否存在数据Integer count = 0; //mapper.selectCount()String projectId;List<String> msg = new ArrayList<>();ProjectBaseInfoResp projectBaseInfo;XSSFWorkbook xssfWorkbook = null;XSSFCell cell = null;try {xssfWorkbook = new XSSFWorkbook(file.getInputStream());} catch (IOException e) {e.printStackTrace();}//获取工作簿中的第一个SheetXSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);//获取第一个Sheet,从第二行开始遍历获取每一行数据for (int rowNum = 2; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {//获取第 rowNum 行对象XSSFRow xssfRow = xssfSheet.getRow(rowNum);Class<ProjectBaseInfoResp> projectBaseInfoRespClass = ProjectBaseInfoResp.class;try {//对象字段必须与excel表格字段顺序一致projectBaseInfo = projectBaseInfoRespClass.newInstance();Field[] fields = projectBaseInfoRespClass.getDeclaredFields();for (int i = 0; i < fields.length; i++) {cell = xssfSheet.getRow(1).getCell(i);Field field = fields[i];field.setAccessible(true);field.set(projectBaseInfo, getValue(xssfRow.getCell(i)));log.info("字段名称:{}", cell);}log.info("解析对象属性值:{}", JSON.toJSONString(projectBaseInfo));} catch (Exception e) {msg.add("项目ID: [ " + xssfRow.getCell(0).toString() + " ] 解析失败! 请检查字段 [ " + cell + " ] 数据是否正确");e.printStackTrace();continue;}//取第一行第一个格的值projectId = getValue(xssfRow.getCell(0));//数据库表中没有数据的时候直接插入所有excel不做校验if (Objects.isNull(count) || count.intValue() == 0) {log.info("插入:{}",projectId);continue;}//根据 projectId 去数据库查询项目//mapper.selectById(projectId);//查询为空插入数据if (Objects.isNull(projectId)) {log.info("插入:{}",projectId);continue;}//如果不为空并且字段有变化则更新数据String oldObject = JSON.toJSONString(projectId);String newObject = JSON.toJSONString(projectBaseInfo);if (Objects.nonNull(projectId) && !oldObject.equals(newObject)) {log.info("更新:{}\n更新前: {}\n更新后: {}",projectId,oldObject,newObject);}}if (msg.size() == 0) {msg.add("已完全同步Excel");}return GlobalResponse.ok(msg);}
}

##通用方法体

    private static String getValue(XSSFCell xssfCell) {if (Objects.isNull(xssfCell)) {return null;}if (xssfCell.getCellType() == CellType.BOOLEAN) {return String.valueOf(xssfCell.getBooleanCellValue());}if (xssfCell.getCellType() == CellType.NUMERIC) {return String.valueOf(xssfCell.getNumericCellValue());}return String.valueOf(xssfCell);}public static <T> List<T> excelTemplate(Integer rowNum,Integer sheetIndex,Class clz, XSSFWorkbook xssfWorkbook) {List<T> excelList = new ArrayList();//获取第一个SheetXSSFSheet xssfSheet = xssfWorkbook.getSheetAt(sheetIndex);//第 rowNum 开始遍历获取每一行数据for (; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {//获取第 rowNum 行对象XSSFRow xssfRow = xssfSheet.getRow(rowNum);try {//对象字段必须与excel表格字段顺序一致T obj = (T) clz.newInstance();Field[] fields = clz.getDeclaredFields();for (int i = 0; i < fields.length; i++) {Field field = fields[i];field.setAccessible(true);field.set(obj, getValue(xssfRow.getCell(i)));}excelList.add(obj);} catch (Exception e) {e.printStackTrace();}}//返回Excel解析后的对象集合return excelList;}
    public static <T> List<T> excelTemplate(Integer rowNum,Integer sheetIndex,Class clz, XSSFWorkbook xssfWorkbook) {List<T> excelList = new ArrayList();List<String> msg = new ArrayList();XSSFCell cell = null;//获取第一个SheetXSSFSheet xssfSheet = xssfWorkbook.getSheetAt(sheetIndex);//第 rowNum 开始遍历获取每一行数据for (; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {//获取第 rowNum 行对象XSSFRow xssfRow = xssfSheet.getRow(rowNum);try {//对象字段必须与excel表格字段顺序一致T obj = (T) clz.newInstance();Field[] fields = clz.getDeclaredFields();for (int i = 0; i < fields.length; i++) {cell = xssfSheet.getRow(1).getCell(i);Field field = fields[i];field.setAccessible(true);field.set(obj, getValue(xssfRow.getCell(i)));log.info("字段名称:{}", cell);}log.info("解析对象属性值:{}", JSON.toJSONString(obj));excelList.add(obj);} catch (Exception e) {e.printStackTrace();msg.add("项目ID: [ " + xssfRow.getCell(0).toString() + " ] 解析失败! 请检查字段 [ " + cell + " ] 数据是否正确");}}log.info("{}", Arrays.toString(msg.toArray()));return excelList;}

JAVA POI通用Excel导入模板相关推荐

  1. Java poi 实现excel导入导出工具类

    最近项目上又要大量的涉及excel导入导出,网上各种导入导出的方式层出不穷,我是比较青睐官方的poi,但是要自己去操作工作簿对象自己一行一行的读取,会有很多的重复代码,重复劳动,也极为不美观,基于合成 ...

  2. poi导出excel写入公式_【java poi 写入Excel后读取公式值问题】poi导入excel

    java poi 写入Excel后读取公式值问题 不用改公式,只需要用cell.getNumericCellValue()获取,读出来就是正确的值了,如果你读出来的还有问题,说明你其他的地方写的还有问 ...

  3. JAVA POI 导出EXCEL时,EXCEL模板中的公式无效问题

    JAVA POI 出力EXCEL时,EXCEL模板中的公式无效问题 工作中遇到一个问题. EXCEL模板有两个sheet,画面内容要导出到第二个sheet中,第一个sheet设置公式,读取第二个she ...

  4. Java的poi的excel导入怎么验证整型格式的单元格

    场景 SpringBoot中使用POI实现Excel导入到数据库(图文教程已实践): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...

  5. Java的poi的excel导入怎么判断日期格式的单元格

    场景 SpringBoot中使用POI实现Excel导入到数据库(图文教程已实践): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...

  6. Java POI 对Excel合并单元格的数据处理

    Java POI 对Excel合并单元格的数据处理 最近在项目开发过程中,有个一个导入Excel文件处理合并单元格数据的需求,就自己在网上找了一个模板,自己进行二次开发来开发需求. Excel工具类 ...

  7. Java - Poi 操作 Excel

    Java - Poi 操作 Excel 关注 "弋凡"(YiFan)微信公众号吧 记录简单笔记 做你的最爱 注意 XSSFWorkbook 对象是操作 .xlsx 格式的表格 HS ...

  8. POI实现Excel导入时提示NoSuchMethodError: org.apache.poi.util.POILogger.log

    场景 SpringBoot中使用POI实现Excel导入到数据库(图文教程已实践) 参照: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  9. java POI创建Excel示例(xslx和xsl区别 )

    Java用来处理office类库有很多,其中POI就是比较出名的一个,它是apache的类库,现在版本到了3.10,也就是2014年2月8号这个版本. 在处理PPT,Excel和Word前,需要导入以 ...

最新文章

  1. 接口级故障的应对方法
  2. mybaits十九:bind绑定
  3. boost::heap模块实现可变堆的测试程序
  4. JS template string 神奇术
  5. mysql 文件组织_数据库如何组织数据?
  6. WHENEVER SQLERROR EXIT SQL.SQLCODE
  7. android 酷炫倒计时,android 好用的倒计时
  8. You can‘t specify target table ‘XXX‘ for update in FROM clause
  9. python导入requests库一直报错原因总结_python导入requests库一直报错原因总结 (文件名与库名冲突)...
  10. PyCharm5.0.2最新版破解注册激活码
  11. HDU - 6464 免费送气球(线段树二分)
  12. C++_类和对象_对象特性_拷贝构造函数调用时机---C++语言工作笔记042
  13. Jquery 学习笔记一
  14. The BIG Talk 2015 :创新金融和智能城市
  15. 浪潮ssr服务器安全加固系统贵吗,浪潮SSR加固服务器安全
  16. pb与java_Java中使用PB教程
  17. Netfilter学习之NAT类型动态配置(三)MASQUERADE内核空间的实现
  18. java代理模式学习笔记
  19. 良心安利秋分海报设计模板素材
  20. 真正可用的获取任意进程的内存使用率 和任务管理器一模一样

热门文章

  1. 深圳地铁远期规划20条线路图首发
  2. java开发常用四大框架(现在java 最流行的开发框架)
  3. Java我的世界forge安装失败,我的世界forge安装失败install怎么办_MCforge安装失败install解决方法...
  4. 我的世界乘法计算机,我的世界乘法计算器存档
  5. 电力电子技术课程实验:实验二、可控整流电路及pwm逆变电路设计、制作、测试
  6. 如何恢复已删除的文件
  7. 武林榜(www.50bang.com)快挂了,和CSDN一样,老毛病层出不穷,转移统计网站了。郁闷。。。。
  8. Softether详解(一)——V*N与softether概述
  9. 高速公路服务器区智慧系统,智慧服务区系统
  10. 数显之家快讯:【SHIO世硕心语】曾国藩240个子孙,就凭这5句话,无一个败家!