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

  1. 利用hutool工具类导出Excel

    简单介绍 可以使用hutool工具类,简单的生成Excel.本质上还是使用的POI组件,只是对其进行了封装,避免开发人员重复造轮子 hutool工具类链接 maven导入 <!-- hutool ...

  2. Java 利用hutool工具实现导出excel并合并单元格

    Java 利用hutool工具实现导出excel并合并单元格 controller层调用service,就一个核心方法,没错就下面这个代码就能实现了.前提是项目里面要引用hutool包.把我这个复制到 ...

  3. JAVA语言(POI数据导入导出Excel)

    POI数据导入导出Excel(样式可以自己设置) //----------------------------Controller层 --------------------------------- ...

  4. 用hutool工具类导出excel

    工作上有一个导出数据的需求,发现用hutool工具类可以非常简洁快捷的生成excel导出. 前期准备 引入hutool的依赖: <dependency><groupId>cn. ...

  5. hutool工具类导出Excel表格

    1.引入hutool和相关依赖 <dependency>         <groupId>cn.hutool</groupId>         <arti ...

  6. java使用POI的HSSFWorkbook导出excel模板添加各种校验

    java导出excel模板添加各种校验 添加值域(下拉列) /*** @description 设置某些列的值只能输入预制的数据,显示下拉框.* @param sheet 模板sheet页(需要设置下 ...

  7. Java 常用的工具类—判断Excel版本读取Excel/CSV文件

    以下内容均来自实际项目需求,记录下,网上找的读取Excel会出现不少问题,下面代码是经过好多次测试改进的符合现在项目的代码,如有不同要求,请自行修改,代码均只去掉了包名. 注:我们的Excel 第一行 ...

  8. hutool工具类导出excel添加水印

    // 创建 ExcelWriter 对象 ExcelWriter writer = ExcelUtil.getWriter("demo.xlsx");// 添加水印 ByteArr ...

  9. java导出excel带图片_JAVA的poi实现模版导出excel(带图片).doc

    JAVA的poi实现模版导出excel(带图片) 下面是本人使用java的poi实现使用模板到处excel,内容包含图片,使用两种不同的方式实现其到处excel.但是使用jxl实现到处excel只能到 ...

最新文章

  1. python 漂亮打印 pprint 简写
  2. python序列类型-Python(第八课,序列类型)
  3. Java数据结构和算法:哈希表
  4. Java:可选的可选实现
  5. php如何实现购物时数量增减,1、vuex状态管理--购物车数量增减
  6. 福昕高级PDF编辑器
  7. 想精通正则表达式 这几个正则表达式学习资料及工具你必须有!
  8. JAVA安装报1620错误_java安装错误1620
  9. win10 tensorflowgpu-2.0安装cuda10.0 +cudnn7.4
  10. 根据dpr设置html fontsize,如何为不同移动设备设置html不同的font-size?
  11. 计算机组成原理白中英考点,唐朔飞版和白中英版《计算机组成原理》考研考点精讲及复习思路...
  12. 【408考研计划】计算机组成原理
  13. dell2900服务器做系统,dell2900如何重装系统
  14. 制作一个简单HTML校园网页(HTML+CSS)学校网站制作 校园网站设计与实现
  15. 借助NetFlow Analyzer的IPAM SPM插件,实现IP和交换机端口管理
  16. ABAP 身份证校验的函数
  17. 就是上来吐槽一下树莓派上,编译个模块都过不去的郁闷。 欢迎使用CSDN-markdown编辑器
  18. 单频点单输入功率只含基波X模型的提取与验证
  19. 【LaTex】6.4 listings高亮设置
  20. qlabel 里内容字体颜色位置不同样式设置_OR视觉丨这4款应用就是我手机里必备的修图APP...

热门文章

  1. 使用kuberbuilder创建工程示例
  2. ARMV8-M学习笔记-入门
  3. [思考]-ARM LR寄存器的思考
  4. [ATF]-smc指令详解
  5. mac包安装kafka
  6. CSS层叠样式表进阶
  7. 【web安全】Web应用隔离防护之Web弱口令爆破
  8. 【网络安全】如何使用PacketSifter从pcap中筛选出有用的信息
  9. 超级任天堂游戏模拟器被曝安全漏洞
  10. Windows Hello 可绕过漏洞进行身份认证