在pom.xml配置文件中加入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
工具类源码附上
package com.aping.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Iterator;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelUtil {
/**
* author: vison
* time: 2019年1月19日,下午10:08:26
* feature:
* @param title 文档标题内容
* @param heads 表头集合
* @param data 数据集合
* @param path 导出文件位置 例:E:\\信息导出表.xls
*/
public static void Out(String title,String[] heads,Collection<?> data,String path) {
// 创建工作簿
HSSFWorkbook wb = new HSSFWorkbook();
// 创建工作表
HSSFSheet Sheet = wb.createSheet();
// 创建行
HSSFRow titleRow = Sheet.createRow(0);
// 创建单元格
HSSFCell titleCell = titleRow.createCell(0);
// 给单元格赋值
titleCell.setCellValue(title);
//创建表头
HSSFRow headRow = Sheet.createRow(1);
for (int i = 0; i < heads.length; i++) {
headRow.createCell(i).setCellValue(heads[i]);
}
//创建表中数据行
Iterator<?> iterator = data.iterator();
int index = 1;
while(iterator.hasNext()) {
index++;
HSSFRow row = Sheet.createRow(index);
//获取数据
Object obj = iterator.next();
//利用反射获取对应数据
//获取所有属性
Field[] fields = obj.getClass().getDeclaredFields();
for(int i =0;i<fields.length;i++) {
HSSFCell cell = row.createCell(i);
Field field = fields[i];
String fieldName = field.getName();//获取属性名
//拼接方法名
String MethodName = "get"+fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
Class objClass = obj.getClass();
Method Method;
Object value = null;
try {
Method = objClass.getMethod(MethodName,new Class[] {});
value = Method.invoke(obj, new Object[] {});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cell.setCellValue(value+"");
}
}
// 导出
try {
wb.write(new FileOutputStream(new File(path)));
wb.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
测试demo的控制层
要传入工具类中所需要的参数
@RequestMapping("exce")
public String exce() {
List<Staff> data = staffService.findAll();
String[] heads = {"编号","姓名","性别","手机号码","邮箱","..."};
String path = "H:\\所有信息.xls";//生成的文件的名称
ExcelUtil.Out("导出数据", heads, data, path);//"导出数据"是表头 可以自己选
return "redirect:/Staff/findList";
}
前台页面直接写一个方法调用后台的接口就可以不需要传参数