Java通过apache poi生成excel实例代码

 更新时间:2017年06月03日 16:22:55   作者:paulWen  
本篇文章主要介绍了Java通过apache poi生成excel实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

首先,jar

maven 添加依赖

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
 <groupId>org.apache.poi</groupId>
 <artifactId>poi-ooxml</artifactId>
 <version>3.15</version>
</dependency>

开始以为是poi,然后就直接加poi的依赖,谁知道并没有所需要的类。查了查才发现是poi-ooxml

要用到的类

  1. XSSFWorkbook , 代表一个excel文档
  2. XSSFSheet , 代表文档中的一个sheet
  3. XSSFRow , 代表sheet中的一行
  4. XSSFCell , 代表row中的每一项的值

最最基本的使用

//创建excel文档
XSSFWorkbook workbook = new XSSFWorkbook();
//创建sheet
XSSFSheet sheet = workbook.createSheet("sheetName");

int rownum=0;
//创建首行
XSSFRow firstrow = sheet.createRow(rownum++);
int cellnum = 0;
//把保存在titles中的各个列名,分别在row中创建cell
for(String key : titles){
 XSSFCell cell = firstrow.createCell(cellnum++);
 cell.setCellValue(key);
}


//下面可以继续创建行

//把excel写到要写的outputStream中
workbook.write(output);
//最后关闭
workbook.close();

小例子一枚

利用反射,把bean类中各属性(用getXxx取出),写入到excel中

ExcelUtil.java

package me.paul.excelDemo;

import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

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;


public class ExcelUtil {
 
 public <T> void getExcel(List<T> list,Class<T> c,OutputStream output) throws IOException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
 Map<String,Method> methodMap = new LinkedHashMap<>(); 
 Method[] methods = c.getDeclaredMethods();
 for(int i=0;i<methods.length;i++){
  Method method = methods[i];
  String name = method.getName();
  Pattern pattern = Pattern.compile("get(.*)");
  Matcher matcher = null;
  if((matcher = pattern.matcher(name)).matches()){
  name = matcher.group(1);
  char ch = name.charAt(0);
  char newch = (char) (ch + 32); 
  name = name.replace(ch,newch);
  methodMap.put(name, method);
  }
 }
 
 XSSFWorkbook workbook = new XSSFWorkbook();
 XSSFSheet sheet = workbook.createSheet(c.getCanonicalName());
 int rownum=0;
 XSSFRow firstrow = sheet.createRow(rownum++);
 int cellnum = 0;
 for(String key : methodMap.keySet()){
  XSSFCell cell = firstrow.createCell(cellnum++);
  cell.setCellValue(key);
 }
 
 for(T t : list){
  XSSFRow row = sheet.createRow(rownum++);
  cellnum = 0;
  for(String key:methodMap.keySet()){
  Method method = methodMap.get(key);
                //设置可访问,之前不知道这方法,所以关于反射那篇文章有错误,见谅见谅
                method.setAccessible(true);
  Object obj = method.invoke(t);
  XSSFCell cell = row.createCell(cellnum++);
  cell.setCellValue(obj== null ? "":obj.toString());
  }
  
 }
 workbook.write(output);
 workbook.close();
 } 
}

App.java 进行测试使用

package me.paul.excelDemo;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

public class App {
 public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException {
 List<User> list = new ArrayList<>();
 User u = new User();
 u.setId(1);
 u.setName("Paul");
 u.setAge(18);
 list.add(u);
 u = new User();
 u.setId(2);
 u.setName("Johnson");
 u.setAge(20);
 list.add(u);
 u = new User();
 u.setId(3);
 u.setName("David");
 u.setAge(22);
 list.add(u);
 OutputStream output = new FileOutputStream("/home/paul/user.xlsx");
 new ExcelUtil().getExcel(list, User.class,output);
 output.close();
 }
}

测试结果截图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot启动后立即执行的几种方法小结

    SpringBoot启动后立即执行的几种方法小结

    在项目开发中某些场景必须要用到启动项目后立即执行方式的功能,本文主要介绍了SpringBoot启动后立即执行的几种方法小结,具有一定的参考价值,感兴趣的可以了解一下
    2023-05-05
  • 解决Mapper接口和mapper.xml的文件位置问题

    解决Mapper接口和mapper.xml的文件位置问题

    这篇文章主要介绍了解决Mapper接口和mapper.xml的文件位置问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 浅析Java中的虚拟线程

    浅析Java中的虚拟线程

    在本篇文章中,小编将带大家深入了解Java虚拟线程的原理、如何使用、使用的注意事项以及其他相似技术的差别,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • SpringBoot整合Spring Security构建安全的Web应用

    SpringBoot整合Spring Security构建安全的Web应用

    pring Security是一个强大的身份验证和访问控制框架,本文主要介绍了SpringBoot整合Spring Security构建安全的Web应用,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Spring中基于xml的AOP的详细步骤

    Spring中基于xml的AOP的详细步骤

    这篇文章主要介绍了Spring中基于xml的AOP的详细步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Java算法之串的简单处理

    Java算法之串的简单处理

    今天小编就为大家分享一篇关于Java算法之串的简单处理,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • SpringBoot可以同时处理多少请求流程分析

    SpringBoot可以同时处理多少请求流程分析

    SpringBoot默认的内嵌容器是Tomcat,也就是我们的程序实际上是运行在Tomcat里的,所以与其说SpringBoot可以处理多少请求,到不如说Tomcat可以处理多少请求,这篇文章主要介绍了SpringBoot可以同时处理多少请求,需要的朋友可以参考下
    2023-02-02
  • 在SpringBoot中配置日期格式化的方法详解

    在SpringBoot中配置日期格式化的方法详解

    通常情况下,发起一个 Http 请求,Spring Boot 会根据请求路径映射到指定 Controller 上的某个方法的参数上,接着,Spring 会自动进行类型转换,对于日期类型的参数,Spring 默认是没有配置如何将字符串转换成日期类型的,本文将给大家介绍在SpringBoot中配置日期格式化的方法
    2023-10-10
  • java string 转date方法如何实现

    java string 转date方法如何实现

    在开发应用中经常会使用到java string 转date这种不是很常见的做法,本文将以此问题提供详细解决方案,需要了解的朋友可以参考下
    2012-11-11
  • java中Locks的使用详解

    java中Locks的使用详解

    这篇文章主要介绍了java中Locks的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论