poi写入xls文件工具类 求大神!!!

ChanceZhao 2017-01-16 05:45:04

工具类

package poiexample;

import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;

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;
import org.apache.poi.ss.usermodel.CellStyle;

public class poiUtils {

public static final String SRC="E:/workbook.xls";

/**
* 生成xls表格
* @param path 生成后放入的路径
* @param T
* @param className 类名
* @throws IOException
* @throws ClassNotFoundException
* @throws SecurityException
* @throws NoSuchFieldException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
@SuppressWarnings("deprecation")
public static <T> void writeXLS(String path,List<T> T,Class<?> className) throws IOException, ClassNotFoundException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{

HSSFWorkbook wb = new HSSFWorkbook();// 创建Excel工作簿对象
HSSFSheet sheet = wb.createSheet(className.getName());// 创建Excel工作表对象
CellStyle cellStyle = wb.createCellStyle();// 创建单元格样式
HSSFRow row = sheet.createRow((short) 0); // 创建Excel工作表的行
HSSFCell cell = row.createCell(0);
cell.setCellStyle(cellStyle); // 创建Excel工作表指定行的单元格
Class<?> clazz=Class.forName(className.toString().substring(6));
Field[] field = clazz.getDeclaredFields();
for (int i = 0; i < field.length; i++) {
row.createCell((short)i).setCellValue(field[i].getName());
}
for (int i = 1; i <T.size()+1; i++) {
row = sheet.createRow((short)i);
for (int j = 0; j < field.length; j++) {
// Field field1 = T.get(i).getClass().getDeclaredField(field[j].getName());
// field1.setAccessible(true);
// System.out.println("haha-------------"+field1.getName());
//此处怎么改
row.createCell((short)j).setCellValue("11");
}
}
FileOutputStream fileOut = new FileOutputStream(path);
wb.write(fileOut);
fileOut.close();
}
}

测试类

public class hahahah {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException {
Man m1 = new Man();
m1.setName("a11");
m1.setAge("a22");
m1.setSex("a33");
Man m2 = new Man();
m2.setName("b11");
m2.setAge("b22");
m2.setSex("b33");
Man m3 = new Man();
m3.setName("c11");
m3.setAge("c22");
m3.setSex("c33");
Man m4 = new Man();
m4.setName("d11");
m4.setAge("d22");
m4.setSex("d33");
Man m5 = new Man();
m5.setName("e11");
m5.setAge("e22");
m5.setSex("e33");

List<Man> lists=new ArrayList<Man>();
lists.add(m1);
lists.add(m2);
lists.add(m3);
lists.add(m4);
lists.add(m5);
try {
poiUtils.writeXLS(poiUtils.SRC,lists,Man.class);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
}
class Man {
private String name;
private String age;
private String sex;

public Man() {

};

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}
}

目前效果图
上面此处怎么改 求怎么获取list中每个对象的值 求大神
...全文
169 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChanceZhao 2017-01-17
  • 打赏
  • 举报
回复
引用 6 楼 qq_18682129 的回复:
我导出Excel的时候 是将HashMap放到List里,遍历的时候map= list.get(i); 然后再使用map.get(“NAME”) ~~~~~ 你可以试一下
解决了~~参考了一下别人 拼接get方法
ChanceZhao 2017-01-17
  • 打赏
  • 举报
回复
引用 7 楼 baidu_37015777 的回复:

                                Field field1 = field[j];
				String fieldName = field1.getName();
				String getMethodName = "get"+ fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
				Method getMethod = clazz.getMethod(getMethodName,new Class[] {});
				String value = (String) getMethod.invoke(T.get(i-1), new Object[] {});
				row.createCell((short)j).setCellValue(value);
已解决
https://www.oschina.net/code/snippet_1444646_44056
ChanceZhao 2017-01-17
  • 打赏
  • 举报
回复

                                Field field1 = field[j];
				String fieldName = field1.getName();
				String getMethodName = "get"+ fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
				Method getMethod = clazz.getMethod(getMethodName,new Class[] {});
				String value = (String) getMethod.invoke(T.get(i-1), new Object[] {});
				row.createCell((short)j).setCellValue(value);
已解决
鲭魜 2017-01-17
  • 打赏
  • 举报
回复
我导出Excel的时候 是将HashMap放到List里,遍历的时候map= list.get(i); 然后再使用map.get(“NAME”) ~~~~~ 你可以试一下
JE_GE 2017-01-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/je_ge/article/details/53414092
ChanceZhao 2017-01-17
  • 打赏
  • 举报
回复
引用 1 楼 JE_GE 的回复:
最好去使用easyuipoi
回头我看看大神可不可以发个你认为很好的连接0,0
ChanceZhao 2017-01-17
  • 打赏
  • 举报
回复
引用 2 楼 hanjupiter 的回复:
for (int i = 1; i <T.size()+1; i++) { row = sheet.createRow((short)i); for (int j = 0; j < field.length; j++) { // Field field1 = T.get(i).getClass().getDeclaredField(field[j].getName()); // field1.setAccessible(true); // System.out.println("haha-------------"+field1.getName()); //此处怎么改 row.createCell((short)j).setCellValue("11"); } } 红色的地方不是要创建数据吗?你要干什么? 取什么数据?要做成什么样子的
取我测试传的数据,上面的5个Man
hanjupiter 2017-01-16
  • 打赏
  • 举报
回复
for (int i = 1; i <T.size()+1; i++) { row = sheet.createRow((short)i); for (int j = 0; j < field.length; j++) { // Field field1 = T.get(i).getClass().getDeclaredField(field[j].getName()); // field1.setAccessible(true); // System.out.println("haha-------------"+field1.getName()); //此处怎么改 row.createCell((short)j).setCellValue("11"); } } 红色的地方不是要创建数据吗?你要干什么? 取什么数据?要做成什么样子的
JE_GE 2017-01-16
  • 打赏
  • 举报
回复
最好去使用easyuipoi

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧