1. 导入Excel将数据转换为对象:

/*** 传入一Excel表格,创建出对应的类集合 要求:类的字段名必须和Excel的首行的标题相同** @param filePath* @param cls* @return* @throws InvalidFormatException* @throws IOException* @throws InstantiationException* @throws IllegalAccessException* @throws NoSuchMethodException* @throws SecurityException* @throws NoSuchFieldException* @throws IllegalArgumentException* @throws InvocationTargetException*/public static <T> List<T> readExcel(String filePath, Class<T> cls) throws InvalidFormatException, IOException,InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException,NoSuchFieldException, IllegalArgumentException, InvocationTargetException {File excelFile = new File(filePath);// 文件流ZipSecureFile.setMinInflateRatio(-1.0d);FileInputStream is = new FileInputStream(excelFile);// 这种方式完美支持Excel、2003/2007/2010Workbook workbook = WorkbookFactory.create(is);// 获取工作区(只提取第一个工作区)Sheet sheet = workbook.getSheetAt(0);// 文件的总行数int rowCount = sheet.getPhysicalNumberOfRows();// 对象的集合List<T> objList = new ArrayList<>();// 获得首行表示,单元格的内容必须与pojo类的字段名一致Row row1 = sheet.getRow(0);for (int i = 1; i < rowCount; i++) {// 解析每一行Row row = sheet.getRow(i);if (!isRowEmpty(row)) {// 反射创建对象T obj = cls.newInstance();for (int j = 0; j < row1.getPhysicalNumberOfCells(); j++) {String title = row1.getCell(j).getStringCellValue();String methodName = "set" + title.substring(0, 1).toUpperCase() + title.substring(1);Cell cell = row.getCell(j);if (cell != null) {String value = null;//这里可根据需要,增加对其它数据类型的判断if (cell.getCellTypeEnum() == CellType.NUMERIC) {if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式的数据SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");value = sdf.format(cell.getDateCellValue());} else {// 处理较长的数字格式的数据,防止数字过长,导致科学计数法DecimalFormat df = new DecimalFormat("0");value = df.format(cell.getNumericCellValue());}}if (cell.getCellTypeEnum() == CellType.STRING) {value = cell.getStringCellValue();}Method method = cls.getDeclaredMethod(methodName, cls.getDeclaredField(title).getType());method.invoke(obj, value);} else {Method method = cls.getDeclaredMethod(methodName, cls.getDeclaredField(title).getType());method.invoke(obj, 0);}}objList.add(obj);}}return objList;}/*** 判断excel某行是否为空* @param row* @return*/public static boolean isRowEmpty(Row row) {if (null == row) {return true;}//第一个列位置int firstCellNum = row.getFirstCellNum();//最后一列位置int lastCellNum = row.getLastCellNum();//空列数量int nullCellNum = 0;for (int c = firstCellNum; c < lastCellNum; c++) {Cell cell = row.getCell(c);if (null == cell || Cell.CELL_TYPE_BLANK == cell.getCellType()) {nullCellNum ++;continue;}cell.setCellType(Cell.CELL_TYPE_STRING);String cellValue = cell.getStringCellValue().trim();if (StringUtils.isEmpty(cellValue)) {nullCellNum ++;}}return nullCellNum == (lastCellNum - firstCellNum);}

方法调用:

// 读取user.xlsx中的账号信息,并解析成员工账号数据
String userPath =ResourceUtils.getURL("classpath:../excel/acl_user.xlsx").getPath();
List<UserVO> userInfos = ExcelReader.readExcel(userPath, UserVO.class);

2.将内存中的对象到出至Excel:

/*** 通用方法,导出excel* @param title 表格标题名* @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。* @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中* @param pattern 如果有时间数据,设定输出格式。默认为"yyy-MM-dd"*/public static <T> void exportExcel(String title, List<T> dataset, OutputStream out, String pattern)throws Exception {// 声明一个工作薄HSSFWorkbook workbook = new HSSFWorkbook();// 生成一个表格HSSFSheet sheet = workbook.createSheet(title);if (dataset == null || dataset.size() == 0){return;}T tempT = dataset.get(0);Field[] heads = tempT.getClass().getDeclaredFields();List<String> headList = new ArrayList<>();// 获取字段注解的表头for (int i = 0; i < heads.length; i++) {String name = heads[i].getName();headList.add(name);}// 产生表格标题行HSSFRow row = sheet.createRow(0);for (int i = 0; i < headList.size(); i++) {HSSFCell cell = row.createCell(i);HSSFRichTextString text = new HSSFRichTextString(headList.get(i));cell.setCellValue(text);}// 遍历集合数据,产生数据行Iterator<T> it = dataset.iterator();int index = 0;while (it.hasNext()) {index++;row = sheet.createRow(index);T t = (T) it.next();Field[] fields = t.getClass().getDeclaredFields();List<Field> fieldsList = new ArrayList<>();for (Field field : fields) {fieldsList.add(field);}for (Field field : fieldsList) {HSSFCell cell = row.createCell(fieldsList.indexOf(field));String fieldName = field.getName();String getMethodName ="get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);Class tCls = t.getClass();Method getMethod = tCls.getMethod(getMethodName, new Class[] {});Object value = getMethod.invoke(t, new Object[] {});// 判断值的类型后进行强制类型转换String textValue = null;if (value == null) {cell.setCellValue("");}if (value instanceof Integer) {int intValue = (Integer) value;cell.setCellValue(intValue);} else if (value instanceof Float) {float fValue = (Float) value;cell.setCellValue(fValue);} else if (value instanceof Double) {double dValue = (Double) value;cell.setCellValue(dValue);} else if (value instanceof Long) {long longValue = (Long) value;cell.setCellValue(longValue);} else if (value instanceof Date) {Date date = (Date) value;SimpleDateFormat sdf = new SimpleDateFormat(pattern);textValue = sdf.format(date);cell.setCellValue(textValue);} else {// 其它数据类型都当作字符串简单处理textValue = value == null ? "" : value.toString();cell.setCellValue(textValue);}}}workbook.write(out);}

方法调用:

String userPath = ResourceUtils.getURL("classpath:excel/acl_user.xlsx").getPath();List<UserInfoVO> userInfos = ExcelReader.readExcel(userPath, UserInfoVO.class);System.out.println(userInfos);// 设置密码userInfos.forEach(user->{// 生成随机密码String pwd = PasswordUtil.generatePwd(8);user.setPwd(pwd);});System.out.println(userInfos);String title = "账号信息表";File file = new File(temp);if(!file.exists()){file.mkdirs();}//临时文件路径/文件名String downloadPath = file + "/employee.xls";OutputStream outputStream = new FileOutputStream(downloadPath);BaseExportExcel.exportExcel(title,userInfos,outputStream,"yyyy-MM-dd");

使用poi导入导出Excel(实测有效)相关推荐

  1. POI导入导出excel表

            在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印. Apache POI是Apache软件基金会 ...

  2. POI导入导出Excel(HSSF格式,User Model方式)

    1.POI说明 Apache POI是Apache软件基金会的开源代码库, POI提供对Microsoft Office格式档案读和写的功能. POI支持的格式: HSSF - 提供读写Microso ...

  3. POI导入导出Excel数据(IDEA版)简单运用

    一.POI Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能,简单来说就是能在Java程序中导入导出W ...

  4. POI导入导出EXCEL经典实现

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...

  5. springboot使用 poi 导入导出Excel工具类

    转载的一个比较好用的工具类 import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOE ...

  6. Struts2 POI 导入导出Excel数据

    页面端: <html> <head> <title>导入数据</title> </head> <body> <h1> ...

  7. POI实现导入导出excel

    poi在日常的导入导出中是比较常用到的,最近也总结了下接触到的poi相关的导入导出的一些代码,有问题可以指出: package com.poi;import km.org.apache.poi.hss ...

  8. SpringBoot使用poi或EasyExcel导入导出Excel文件

    使用poi导入导出Excel 首先引入poi依赖包 03版本的Excel和07版本的Excel所需要的依赖不同,都需要导入. 记录问题: 最初导入的poi包为3.6版本.WorkBook类和Sheet ...

  9. java导入导出excel文件

    前言:该文章使用java集成poi来操作excel文件,此处只对poi相关api进行代码编写,对于poi的理论性知识,可在学习完这篇文章后,自行百度学习.建议大家跟着文章敲一遍代码. 创建一个mave ...

最新文章

  1. golang中的数字签名
  2. ASCII码对照表 转帖
  3. bo耳机h5使用说明_真香时刻·性价比大旗——红米AirDots2 TWS真无线耳机体验测评...
  4. 日志服务与SIEM(如Splunk)集成方案实战
  5. java复制文件夹中的所有文件和文件夹到另一个文件夹中
  6. (0.2)linux下Mysql的安装配置与管理入门(目录篇)
  7. 机器学习经典算法笔记——PCA和梯度上升算法
  8. Variant类型转换成CString代码
  9. adams如何保存_教你如何快速把模型 从solidworks转到adams里
  10. arch linux 进入黑屏,无法从Arch Linux进入Beaglebone Black
  11. idea devtools 配置开关_最新版IDEA常用配置指南,打造你的最酷IDE
  12. 两轮差速驱动机器人运动模型及应用分析
  13. LayaAir Graphics.drawTexture 显示与切换图片
  14. 线性代数--向量的内积,正交,正交矩阵,规范正交,施密特正交化
  15. 京瓷打印机p5026cdn_京瓷ECOSYS P5026cdn驱动
  16. 深度思考:到底什么是面向接口编程?
  17. Android移动开发基础案例教程第2版课后习题
  18. 苹果备忘录怎么使用计算机,原来苹果备忘录这么神奇!你还不会用?网友:万把块白花了...
  19. Can't locate Tk.pm
  20. 中兴oltc320用户手册_中兴OLT常用命令

热门文章

  1. Solidworks装配中的常见问题解决
  2. php上传头像的代码,php视频拍照上传头像功能实现代码分享
  3. Java Scanner类的详细介绍(Java键盘输入)
  4. flutter图片选择
  5. 长隆大马戏机器人_2021出来便是侏罗纪公园,这里面的恐龙真的很逼真,刚进去的我着实被吓了一跳!侏罗纪公园里的傻机器人_长隆野生动物世界-评论-去哪儿攻略...
  6. 2022.3.14密码学基础题【网络攻防CTF】(保姆级图文)
  7. C#无法加载DLL‘‘‘###.dll‘,找不到指定的模块。(异常来自HRESULT:0x8007007E)
  8. 独家交付秘籍之招式拆解(第一回)
  9. 论文阅读:Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks
  10. 中国历朝地图[11P]