- 1.在指定的目录下创建excel
- 2.不需要知道传来的是什么类,利用传来的List获取对象并利用反射得到每个类的get方法,并给每个EXCEL的每个列赋值
- 3.表头是根据数据库中的字典表获取的每个表的中文字符。
package com.example.demo.util;
import com.example.demo.domain.User;
import org.apache.poi.hssf.usermodel.*;
import javax.servlet.http.HttpServletResponse;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.File;
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.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
public class Excle {
Excle(){};
/***
* 创建表头
* @param sheet
*/
private static void createTitle(HSSFSheet sheet,String titleName[])
{
HSSFRow row = sheet.createRow(0);
//设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
sheet.setColumnWidth(0, 10*256);
sheet.setColumnWidth(1, 10*256);
sheet.setColumnWidth(2, 15*256);
sheet.setColumnWidth(3, 80*256);
sheet.setColumnWidth(4, 15*256);
sheet.setColumnWidth(5, 80*256);
for(int i=0;i<titleName.length;i++){
row.createCell(i).setCellValue(titleName[i]);
}
//这是硬给表头
/* HSSFCell cell;
cell = row.createCell(0);
cell.setCellValue("姓名");
cell = row.createCell(1);
cell.setCellValue("性别");
cell = row.createCell(2);
cell.setCellValue("电话");
cell = row.createCell(3);
cell.setCellValue("家庭地址");*/
}
public static int downloadAllClassmate(List<?> list,String titleName[],String sheetName,String dirPath,String fileName) throws Exception {
int status =0; //返回0下载失败,返回1下载成功
HSSFWorkbook workbook = new HSSFWorkbook(); //新建一个工作簿
HSSFSheet sheet = workbook.createSheet(sheetName);//sheetName
HSSFCellStyle style = workbook.createCellStyle();
style.setLocked(false);
//设置表头
createTitle(sheet,titleName);
//新增数据行,并且设置单元格数据
int rowNum = 1;
Class clazz = list.get(0).getClass();
for(int i=0;i<list.size();i++) { //遍历获取的每一行数据
HSSFRow row = sheet.createRow(rowNum);
int j =0;
//获得Object对象中的所有方法
Object obj = list.get(i);
Field[] fields = obj.getClass().getDeclaredFields();//获得属性
for (Field field : fields) {
PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
Method getMethod = pd.getReadMethod();//获得get方法
getMethod.invoke(obj);//此处为执行该Object对象的get方法
row.createCell(j).setCellValue((String) getMethod.invoke(obj)); //利用反射调用get方法为每一个列赋值
j++;
// Method setMethod = pd.getWriteMethod();//获得set方法
//setMethod.invoke(obj,"参数");//此处为执行该Object对象的set方法
}
rowNum++;
}
File f = new File(dirPath);
if(!f.exists()){
f.mkdir();
}
FileOutputStream out =null;
try {
out = new FileOutputStream(dirPath+"/"+fileName);
workbook.write(out);//目录存放路径
status =1;
}catch (Exception e){
status =0;
throw e;
}finally {
out.close();
workbook.close();
}
return status;
}
}
主类调用
int status = Excle.downloadAllClassmate(list,titleName,"信息表","D://Excel",date+".xls");