您的位置:首页 > 编程语言 > Java开发

导出Excle java

2017-02-21 16:49 176 查看
今天小编又为大家带来了好用的工具类啦 那就是导出Excle

public class Excel {
public final static <T> String exportExcel(String fileName,String sheetName,String[] Title, List<T> listContent,HttpServletRequest request,HttpServletResponse response){
String result="系统提示:Excel文件导出成功!";
//输出到excel
try {
OutputStream os= new BufferedOutputStream(response.getOutputStream());
response.reset();// 清空输出流
final String userAgent = request.getHeader("USER-AGENT");
String finalFileName = null;
if(StringUtils.contains(userAgent, "MSIE")){//IE浏览器
finalFileName = URLEncoder.encode(fileName,"UTF8");
}else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
finalFileName = new String(fileName.getBytes(), "ISO8859-1");
}else{
finalFileName = URLEncoder.encode(fileName,"UTF8");//其他浏览器
}
response.setHeader("Content-disposition", "attachment; filename=\""+ finalFileName+"\"");
// 设定输出文件头
response.setContentType("application/msexcel");// 定义输出类型
//** **********创建工作簿************ *//
HSSFWorkbook workbook = new HSSFWorkbook();

//创建工作表
HSSFSheet sheet = workbook.createSheet(sheetName);
//设置行标题
HSSFRow titleRow = sheet.createRow(0);
//设置excel表的表头
for(int i=0;i<Title.length;i++){
sheet.setColumnWidth(i, 4000);
//设置单元格中的数据
titleRow.createCell(i).setCellValue(Title[i]);
}
//设置excel表中的剩余的单元格
//获取传递过来的正文的数据listContent
for(int j=0;j<listContent.size();j++){
//list中传递过来的是数据表中的正文部分
List<String> cellValues = getValue(listContent.get(j));
HSSFRow contentRow = sheet.createRow(j+1);
//设置表中的数据
for(int k=0;k<cellValues.size();k++){
contentRow.createCell(k).setCellValue(cellValues.get(k));
}
}
//将生成的excel表写入到流中去
workbook.write(os);
os.flush();
os.close();

} catch (Exception e) {
result="系统提示:Excel文件导出失败,原因:"+ e.toString();
System.out.println(result);
e.printStackTrace();
}
//返回结果
return result;
}
//获得实体类中的属性和值
public static List<String> getValue(Object object) throws Exception{
Field[] fields = object.getClass().getDeclaredFields();//获取属性名称数组
List<String> stringList = new ArrayList<>();
for (int i = 0; i < fields.length; i++) {
Object valueObj = getFieldValue(object,fields[i].getName());//获取属性值
if (valueObj != null) {
String name = fields[i].getName(); // 获取属性的名字
name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
String type = fields[i].getGenericType().toString(); // 获取属性的类型
if (type.equals("class java.util.Date")) {
SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
valueObj = sim.format(valueObj);
}
stringList.add(valueObj.toString());
}
}
return stringList;
}
/**
* 通过反射,用属性名称获得属性值
* @param thisClass 需要获取属性值的类
* @param fieldName 该类的属性名称
* @return
*/
public static Object getFieldValue(Object thisClass, String fieldName)
{
Object value = new Object();
Method method = null;
try {
String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
method = thisClass.getClass().getMethod("get" + methodName);
value = method.invoke(thisClass);
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  导出 Excle