【工具类】JAVA POI 代码导出表格的两种办法(代码全注释,小白也不怕)
讲点废话,吐个槽
最近有个要求,表格导出,之前也搞过,但觉得每次都到处找太麻烦了,有些大佬,展示部分代码,看着挺多个类,复制粘贴运行就报错,一检查,少个关键类,没办法跑,要么就是标注个什么什么大全,下载打钱,虽然白嫖不好,毕竟别人学习总结成果,但我爽啊,一直白嫖一直爽,咱自己翻了点资料,总结了一下导出表格大概也就两种情况
标准表格
如果导出的这种表格,那么就是很简单的事,上代码
准备
pom文件
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency>
实体类
@Data
public class Member {/*** 学号*/private Integer code;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 生日*/private Date birth;
工具类方法
public static void createExcel(Map<String, List<String>> map, String[] strArray) {// 创建一个webbook,对应一个Excel文件HSSFWorkbook wb = new HSSFWorkbook();// 在webbook中添加一个sheet,对应Excel文件中的sheetHSSFSheet sheet = wb.createSheet("sheet1");// 在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制shortHSSFRow row = sheet.createRow(0);// 添加标题行HSSFCell cell = null;for (int i = 0; i < strArray.length; i++) {// 获取行内对应单元格cell = row.createCell(i);// 单元格赋值cell.setCellValue(strArray[i]);}// 写入实体数据,实际应用中这些数据从数据库得到,list中字符串的顺序必须和数组strArray中的顺序一致int i = 0;for (String str : map.keySet()) {// 除去标题行,遍历获取后面行号对象row = sheet.createRow(i + 1);// 获取要添加到单元格的集合数据List<String> list = map.get(str);// 遍历当前行内所有单元格for (int j = 0; j < strArray.length; j++) {// 创建单元格,并设置值row.createCell(j).setCellValue(list.get(j));}// 第六步,将文件存到指定位置try {FileOutputStream fout = new FileOutputStream("D:/国家机密.xls");wb.write(fout);fout.close();} catch (Exception e) {e.printStackTrace();}i++;}}
测试代码
/*** @Author: wanyuan* Date: 2020/8/26 16:23*/
public class DownloadExcel {public static void main(String[] args) {Map<String, List<String>> memberMap = getMember();String[] strArray = excelTitle();ExcelUtil.createExcel(memberMap, strArray);}/*** 初始化数据,将会被存储到excel表格中** @return* @throws Exception*/private static Map<String, List<String>> getMember() {List<Member> list = new ArrayList<Member>();Map<String, List<String>> map = new HashMap<String, List<String>>();SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");try {Member user1 = new Member(1, "赵丽颖", 18, df.parse("2002-10-16"));Member user2 = new Member(2, "娜美", 20, df.parse("2000-08-19"));Member user3 = new Member(3, "汉克库", 25, df.parse("1995-11-22"));list.add(user1);list.add(user2);list.add(user3);for (int i = 0; i < list.size(); i++) {ArrayList<String> members = new ArrayList<String>();members.add(list.get(i).getCode() + "");members.add(list.get(i).getName());members.add(list.get(i).getAge() + "");members.add(df.format(list.get(i).getBirth()));map.put(list.get(i).getCode() + "", members);}} catch (ParseException e) {e.printStackTrace();}return map;}/*** 创建标题行数据*/public static String[] excelTitle() {String[] strArray = { "学号", "姓名", "年龄", "生日" };return strArray;}
}
输出结果
非正常表格
非常简单的一个例子,填写的简历,让导出成为表格,那就不是循环遍历,挨着存入的了,而是需要人为控制表格的填写
所以需要一个模板文件,如:
工具类
public static void readExcel(String[] strArray){try{// Excel模板文件路径String temlateRealPath = "D:/国家机密.xls";//读取模板文件创建Excel表格对象HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(temlateRealPath)));// 获取模板文件第一个sheet,对应Excel文件中的sheetHSSFSheet sheet = workbook.getSheetAt(0);// 根据要求,可以得出结论,我们需要填写的单元格是2-B,2-D,3-B,3-D// 获取对应行号HSSFRow row = sheet.getRow(1);// 对应单元格填入数据row.getCell(1).setCellValue(strArray[0]);row.getCell(3).setCellValue(strArray[1]);row = sheet.getRow(2);row.getCell(1).setCellValue(strArray[2]);row.getCell(3).setCellValue(strArray[3]);try {// 输出流FileOutputStream fout = new FileOutputStream("D:/维多利亚的秘密.xls");workbook.write(fout);fout.close();} catch (Exception e) {e.printStackTrace();}}catch (Exception e){e.printStackTrace();}}
测试代码
/*** @Author: wanyuan* Date: 2020/8/26 16:23*/
public class DownloadExcel {public static void main(String[] args) {String[] strArray = excelTitle();ExcelUtil.readExcel(strArray);}/*** 准备数据*/public static String[] excelTitle() {String[] strArray = { "赵丽颖", "18", "160", "2002-10-16" };return strArray;}
}
输出结果
总结
- 标准表格导出很简单,高兴就好
- 奇奇怪怪的表格导出,没发现其他什么好一点的办法,如果有大佬知道别的好办法,可以告诉小弟一声
- 第二个工具类导出方法具体逻辑根据模板文件来定,但愿你们没有这种需求(PS:对提这个需求的产品经理说句,一路走好,愿天堂没有痛苦,愿天堂没有纷争)
【工具类】JAVA POI 代码导出表格的两种办法(代码全注释,小白也不怕)相关推荐
- Java工具类 —— Java POI 4.X 的Excel基本操作
Excel报表操作在日常办公和生活中应用非常广泛,今天我们来看看Java是怎么操作Excel的. 先分享一下工具类:工具类ExcelOperators,点击下载 欢迎下载使用,更希望自己动动手,写一下 ...
- java poi pdf 导出
java poi pdf 导出 (java poi pdf导出 文字+图片两张放置一行) 思路:流传入图片 ,pdf没有行的概念,只有列即为一行,两张图片可以先建立一列在一列总再建立两列各放置一张图片 ...
- 「Java工具类」pdf导出工具类java导出pdf文件工具类
介绍语 本号主要是Java常用关键技术点,通用工具类的分享:以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+d ...
- java练习(数组工具类的封装)[目前写过最长的代码,虽然不难]
java练习(数组工具类的封装)[目前写过最长的代码,虽然不难] package myUtil.arrayUtil;public class ArraysUtil {/*** 升序排列一个byte数组 ...
- java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...
本文将要为您介绍的是[JAVA SE基础篇]45.迭代器.Collections工具类以及使用容器存储表格,具体完成步骤: 1.迭代器 迭代器为我们提供了统一遍历容器(List/Map/Set)的方式 ...
- ApachePOI导出exce,设置单元格风格的属性和设置字体风格的属性的两个工具类,POI宽度和excel 像素转换
设置单元格风格的属性和设置字体风格的属性的两个工具类,POI宽度和excel 像素转换 /*** 功能:设置单元格风格的属性* */public static HSSFCellStyle SetCel ...
- java poi word导出
java poi word导出 (含有文字,图像) 导出word效果如下: 思路:建立预期导出word效果,设置为模板,然后填充对应信息,注意,加粗,居中等一些图片,文字格式预先设置好.然后进行文字或 ...
- Java解决Excel导出大批量数据(附上测试代码)
记录一次项目中使用POI导出Excel报错的修改方案. 参考了作者:happyljw的文章 JAVA使用POI如何导出百万级别数据,对代码进行封装扩展.由于项目时间太紧,并未对写的代码进行严格测试,遇 ...
- C#底层库--操作Excel帮助类(读取、导出表格)
系列文章 C#底层库–记录日志帮助类 本文链接:https://blog.csdn.net/youcheng_ge/article/details/124187709 C#底层库–MySQL脚本自动构 ...
最新文章
- 数据分析软件python 对电脑的要求-用于数据分析的BI工具还是python?
- reuse project css less path folder hierarchy issue
- 递归调用方法时栈内存是如何变化的?(使用内存图演示递归调用过程)
- .NET实现之(自动更新
- EIGRP单边邻居——认证
- php+分针和时针重合,关于时针和分钟重合次数的计算
- c++折线平移算法_【MITA周刊】第十五周:聚类算法
- java hex to ascii_使用java实现hex和ascii码的转换
- 研究了EXCEL的行高问题
- php 获取文件名 行号,PHP – 找到文件中的字符串,然后显示它的行号
- hive 窗口函数(开窗函数)
- mac抓包工具charles破解版安装及简单使用
- spring常见用法之安全模块(注册登录模块)
- python 实现批量抠图
- 大数据之实战足球盘口、凯利、必发和预测结果分析
- GUI提示功控件,LVGL『Label标签控件』介绍
- Daily Scrum Meeting 11.05
- Python笔记_07_列表的相关操作_列表相关函数_深浅拷贝_字典相关函数_集合相关函数_冰冻集合
- 人脸识别方案(一)-ocr
- Dropbear替代Openssh-ssh client使用