本案例只是自己封装了一个简单的ExcelUtil,简单的创建excel表,没有任何的样式
1.需要用到的架包
架包的下载地址:
https://search.maven.org/search?q=g:org.apache.commons%20AND%20a:commons-collections4
https://search.maven.org/search?q=g:org.apache.poi%20AND%20a:poi
http://maven.outofmemory.cn/org.apache.commons/commons-math3/3.3/
2.需要封装一个excel对象方便进行传递
private Listlist;// 数据所在的集合
private String[]title;//sheet表的标题
private String[]keys;//对象的属性名,方便标题跟数据对齐
private StringSheetName;//sheet表的名称
private StringexcelName;//excel的名称
private Stringpath;//excel表格保存的路径
3.封装一个ExcelUtil类(不愿写的可拿来直接使用)
public class ExcelUtil {
public static void createExcel(Excel excel)throws IOException, IllegalAccessException {
HSSFWorkbook hssfWorkbook =new HSSFWorkbook();//创建一个工作部
HSSFSheet hssfSheet = hssfWorkbook.createSheet(excel.getSheetName());//创建一个工作表(参数是sheet表的名称)
//创建第一行sheet表中的内容,索引是从0开始,第一行是sheet表的标题栏
HSSFRow hssfRowHeader = hssfSheet.createRow(0);
String[] title = excel.getTitle();//标题数组
HSSFCell cell =null;//创建单元格对象
//遍历生成标题栏里面的标题单元格
for (int i =0; i < title.length; i++) {
cell = hssfRowHeader.createCell(i);//遍历生成索引是0行的每一个标题单元格对象
cell.setCellValue(title[i]);//添加数据
}
List students = excel.getList();//内容集合
String[] keys = excel.getKeys();//属性名的数组,判断到底要在excel呈现出多少数据
//导出内容
for (int i =0; i < students.size(); i++) {//集合的长度就是sheet表中内容的条数,比如(长度为3,内容就有三条,索引从1开始)
HSSFRow hssfRowContext = hssfSheet.createRow(i +1);
Field[] studentArray = students.get(i).getClass().getDeclaredFields();//利用反射将对象属性变成一个数组
for (int j =0; j < studentArray.length; j++) {
System.out.println();
studentArray[j].setAccessible(true);//这句很重要,意思是设置是否允许访问,而不是修改原来的访问权限修饰词。
for (int k =0; k < keys.length; k++) {
if (keys[k].equals(studentArray[j].getName())) {
cell = hssfRowContext.createCell(k);
cell.setCellValue(studentArray[j].get(students.get(i)).toString());
}
}
}
}
FileOutputStream fos =new FileOutputStream(excel.getPath() +"/" + excel.getExcelName() +".xlsx");
hssfWorkbook.write(fos);
}
}
4.测试类测试
List students =new ArrayList<>();
students.add(new Student("张三",29,1,"烟台"));
students.add(new Student("王五",38,2,"威海"));
students.add(new Student("刘杰",56,3,"济南"));
Excel excel =new Excel();
excel.setList(students);
//标题数组
String[] title =new String[]{"姓名","年龄","地址"};
String[] keys =new String[]{"name","age","address"};
excel.setTitle(title);
excel.setKeys(keys);
excel.setExcelName("学生管理系统导出表");
excel.setSheetName("学生信息表");
excel.setPath("C:\\Users\\swj\\Desktop\\java学习资料");
ExcelUtil.createExcel(excel);