java使用POI工具类导出excel
POI导出excel
1.导入maven依赖
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency>
2.工具类
ExcelEntity.java
/*** 代表要打印的Excel表格,用于存放要导出为Excel的相关数据** @param <T> 代表要打印的数据实体,如User等* @author zhrb@cec.jmu*/
public class ExcelEntity<T> {private String sheetName;//默认生成的sheet名称private String header;//题头private String footer;//脚注//底下是必须具备的属性private String fileName;private String[] columnNames;//列名private String[] methodNames;//与列名对应的方法名private List<T> entities;//数据实体
public ExcelEntity(String fileName, String[] columnNames, String[] methodNames, List<T> entities) {this("sheet1", "", "", fileName, columnNames, methodNames, entities);}
public ExcelEntity(String sheetName, String header, String footer, String fileName, String[] columnNames,String[] methodNames, List<T> entities) {
this.sheetName = sheetName;this.header = header;this.footer = footer;this.fileName = fileName;this.columnNames = columnNames;this.methodNames = methodNames;this.entities = entities;}
public String getHeader() {return header;}
public void setHeader(String header) {this.header = header;}
public String getSheetName() {return sheetName;}
public void setSheetName(String sheetName) {this.sheetName = sheetName;}
public List<T> getEntities() {return entities;}
/*** @param entities 用于导出Excel的实体集合*/public void setEntities(List<T> entities) {this.entities = entities;}
public String getFooter() {return footer;}
public void setFooter(String footer) {this.footer = footer;}
public String[] getColumnNames() {return columnNames;}
public void setColumnNames(String[] columnNames) {this.columnNames = columnNames;}
public String getFileName() {return fileName;}
public void setFileName(String fileName) {this.fileName = fileName;}
public String[] getMethodNames() {return methodNames;}
public void setMethodNames(String[] methodNames) {this.methodNames = methodNames;}
}
ExcelExporter.java
public class ExcelExporter {/*** 根据ExcelEntity等参数生成Workbook** @param entity* @return* @throws Exception*/public static <T> Workbook export2Excel(ExcelEntity<T> entity) throws Exception {Workbook workbook = export2Excel(entity.getHeader(), entity.getFooter(), entity.getSheetName(), entity.getColumnNames(), entity.getMethodNames(),entity.getEntities());return workbook;}
/*** 根据给定参数导出Excel文档** @param headerTitle 题头* @param sheetName* @param columnNames 表头名称* @param methodNames* @param entities* @return* @throws Exception*/public static <T> Workbook export2Excel(String headerTitle, String footerTitle, String sheetName, String[] columnNames,String[] methodNames, List<T> entities) throws Exception {if (methodNames.length != columnNames.length) {throw new IllegalArgumentException("methodNames.length should be equal to columnNames.length:"+ columnNames.length + " " + methodNames.length);}Workbook newWorkBook2007 = new XSSFWorkbook();Sheet sheet = newWorkBook2007.createSheet(sheetName);//设置题头Header header = sheet.getHeader();header.setCenter(headerTitle);//设置脚注Footer footer = sheet.getFooter();footer.setCenter(footerTitle);
int[] columnWidths = new int[columnNames.length];// 创建表头createTableHeader(sheet, 0, headerTitle, columnNames, columnWidths);// 填充表内容createTableContent(sheet, 1, methodNames, columnWidths, entities);
return newWorkBook2007;
}
/*** 创建表头** @param sheet* @param index 表头开始的行数* @param headerTitle 题头* @param columnNames* @param columnWidths*/private static void createTableHeader(Sheet sheet, int index, String headerTitle, String[] columnNames,int[] columnWidths) {
Row headerRow = sheet.createRow(index);
/* 格式设置 */// 设置字体Font font = sheet.getWorkbook().createFont();font.setBold(true);// 粗体显示// 设置背景色CellStyle style = sheet.getWorkbook().createCellStyle();style.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());style.setFillPattern(FillPatternType.SOLID_FOREGROUND);style.setFont(font);
for (int i = 0; i < columnNames.length; i++) {Cell headerCell = headerRow.createCell(i);headerCell.setCellStyle(style);headerCell.setCellValue(columnNames[i]);}
for (int i = 0; i < columnNames.length; i++) {columnWidths[i] = (columnNames[i].getBytes().length + 2) * 256;sheet.setColumnWidth(i, columnWidths[i]);}
}
/*** 创建表格内容** @param sheet* @param rowIndexBegin 表内容开始的行数* @param methodNames T对象的方法名* @param columnWidths* @param entities* @throws Exception*/private static <T> void createTableContent(Sheet sheet, int rowIndexBegin, String[] methodNames, int[] columnWidths,List<T> entities) throws Exception {Class<? extends Object> clazz = null;if (entities.size() > 0) {clazz = entities.get(0).getClass();}String content;for (T t : entities) {Row row = sheet.createRow(rowIndexBegin++);for (int i = 0; i < methodNames.length; i++) {Cell cell = row.createCell(i);Method method = clazz.getMethod(methodNames[i], null);Object object = method.invoke(t, null);object = object == null ? "" : object;if (object.getClass().equals(Date.class)) {// 对日期格式进行特殊处理SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");content = sdf.format((Date) object);cell.setCellValue(content);} /*else if (object.getClass().equals(Timestamp.class)){//对时间戳进行特殊处理Date d = new Date();} */ else {content = object.toString();cell.setCellValue(content);}int columnWidth = (content.getBytes().length + 2) * 256;if (columnWidth > columnWidths[i]) {// 如果实际内容宽度大于对应的表头宽度,则设置为实际内容宽度columnWidths[i] = columnWidth;sheet.setColumnWidth(i, columnWidths[i]);}
}}}
/*** 将workbook2007存为文件** @param workbook2007* @param dstFile*/public static void saveWorkBook2007(Workbook workbook2007, String dstFile) {File file = new File(dstFile);OutputStream os = null;try {os = new FileOutputStream(file);workbook2007.write(os);} catch (IOException e) {e.printStackTrace();} finally {if (os != null) {try {os.close();} catch (IOException e) {System.out.println(e);}}}}
}
3.测试
创建测试实体类
Hero.java
public class Hero {private String name;private Integer age;
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public Integer getAge() {return age;}
public void setAge(Integer age) {this.age = age;}
}
Wind.java
public class Wind {private String location;private Integer speed;private Date Timestamp;
public String getLocation() {return location;}
public void setLocation(String location) {this.location = location;}
public Integer getSpeed() {return speed;}
public void setSpeed(Integer speed) {this.speed = speed;}
public Date getTimestamp() {return Timestamp;}
public void setTimestamp(Date timestamp) {Timestamp = timestamp;}
}
测试导出excel文件
public static void main(String[] args) throws Exception {
// 准备数据List<Wind> winds = new ArrayList<>();// Wind有三个方法:getLocation、getSpeed、getTimestampfor (int i = 0; i < 10; i++) {Wind wind = new Wind();wind.setLocation(i + "");wind.setSpeed(i * 10);wind.setTimestamp(new Date());winds.add(wind);}String[] columnNames = {"地点", "速度", "时间"};String[] methodNames = {"getLocation", "getSpeed", "getTimestamp"};
// String fileName = "d:/temp/excel1.xlsx";String fileName = "/Users/apple/Documents/test.xlsx";// 生成ExcelEntity实体,包含4个必备参数ExcelEntity<Wind> excelEntity = new ExcelEntity<>(fileName, columnNames, methodNames, winds);//excelEntity.setHeader("题头");//excelEntity.setFooter("脚注");Workbook excel = ExcelExporter.export2Excel(excelEntity);//ExcelExporter.export2Excel("题头","脚注", "sheet1", columnNames, methodNames, winds);//也可以这样调用,无需新建ExcelEntity对象//将Workbook存为文件ExcelExporter.saveWorkBook2007(excel, excelEntity.getFileName());
System.out.println("导出完成!");}
生成如下excel文件
java使用POI工具类导出excel相关推荐
- 利用hutool工具类导出Excel
简单介绍 可以使用hutool工具类,简单的生成Excel.本质上还是使用的POI组件,只是对其进行了封装,避免开发人员重复造轮子 hutool工具类链接 maven导入 <!-- hutool ...
- Java 利用hutool工具实现导出excel并合并单元格
Java 利用hutool工具实现导出excel并合并单元格 controller层调用service,就一个核心方法,没错就下面这个代码就能实现了.前提是项目里面要引用hutool包.把我这个复制到 ...
- JAVA语言(POI数据导入导出Excel)
POI数据导入导出Excel(样式可以自己设置) //----------------------------Controller层 --------------------------------- ...
- 用hutool工具类导出excel
工作上有一个导出数据的需求,发现用hutool工具类可以非常简洁快捷的生成excel导出. 前期准备 引入hutool的依赖: <dependency><groupId>cn. ...
- hutool工具类导出Excel表格
1.引入hutool和相关依赖 <dependency> <groupId>cn.hutool</groupId> <arti ...
- java使用POI的HSSFWorkbook导出excel模板添加各种校验
java导出excel模板添加各种校验 添加值域(下拉列) /*** @description 设置某些列的值只能输入预制的数据,显示下拉框.* @param sheet 模板sheet页(需要设置下 ...
- Java 常用的工具类—判断Excel版本读取Excel/CSV文件
以下内容均来自实际项目需求,记录下,网上找的读取Excel会出现不少问题,下面代码是经过好多次测试改进的符合现在项目的代码,如有不同要求,请自行修改,代码均只去掉了包名. 注:我们的Excel 第一行 ...
- hutool工具类导出excel添加水印
// 创建 ExcelWriter 对象 ExcelWriter writer = ExcelUtil.getWriter("demo.xlsx");// 添加水印 ByteArr ...
- java导出excel带图片_JAVA的poi实现模版导出excel(带图片).doc
JAVA的poi实现模版导出excel(带图片) 下面是本人使用java的poi实现使用模板到处excel,内容包含图片,使用两种不同的方式实现其到处excel.但是使用jxl实现到处excel只能到 ...
最新文章
- python 漂亮打印 pprint 简写
- python序列类型-Python(第八课,序列类型)
- Java数据结构和算法:哈希表
- Java:可选的可选实现
- php如何实现购物时数量增减,1、vuex状态管理--购物车数量增减
- 福昕高级PDF编辑器
- 想精通正则表达式 这几个正则表达式学习资料及工具你必须有!
- JAVA安装报1620错误_java安装错误1620
- win10 tensorflowgpu-2.0安装cuda10.0 +cudnn7.4
- 根据dpr设置html fontsize,如何为不同移动设备设置html不同的font-size?
- 计算机组成原理白中英考点,唐朔飞版和白中英版《计算机组成原理》考研考点精讲及复习思路...
- 【408考研计划】计算机组成原理
- dell2900服务器做系统,dell2900如何重装系统
- 制作一个简单HTML校园网页(HTML+CSS)学校网站制作 校园网站设计与实现
- 借助NetFlow Analyzer的IPAM SPM插件,实现IP和交换机端口管理
- ABAP 身份证校验的函数
- 就是上来吐槽一下树莓派上,编译个模块都过不去的郁闷。 欢迎使用CSDN-markdown编辑器
- 单频点单输入功率只含基波X模型的提取与验证
- 【LaTex】6.4 listings高亮设置
- qlabel 里内容字体颜色位置不同样式设置_OR视觉丨这4款应用就是我手机里必备的修图APP...