1、需要两个jar包
jxl.jar的jar包,已经放入百度云,可以自己下载
链接:https://pan.baidu.com/s/1nqzTnFEqc8JX5RlxgZJZlQ
提取码:oiir
poi.jar的jar包,已经放入百度云,可以自己下载
链接:https://pan.baidu.com/s/1jfa2jRopF9rzzb-4pfdQhg
提取码:j7a8
2、创建一个实体类Students
public class Students {
private String number;
private String name;
private String clazz;
private String age;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClazz() {
return clazz;
}
public void setClazz(String clazz) {
this.clazz = clazz;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Students [number=" + number + ", name=" + name + ", clazz=" + clazz + ", age=" + age + "]";
}
}
3、Excle导入,导出类
//注意导入的excle文件要存在
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class Excel {
public static void main(String args[]) throws IOException {
Excel excel=new Excel();
List<Students> list=excel.readExcelData("dd.xls");
createExcel(list, "D:\\excel");
}
public List<Students> readExcelData(String fileName) throws IOException {
List<Students> list=new ArrayList<Students>();
// 用字节流的方式先读取到你想要的excel的文件
FileInputStream fis = new FileInputStream(new File("E:\\dd.xls"));
// 解析excel
POIFSFileSystem pSystem = new POIFSFileSystem(fis);
// 获取整个excel
HSSFWorkbook hb = new HSSFWorkbook(pSystem);
// 获取第一个表单sheet
HSSFSheet sheet = hb.getSheetAt(0);
// 获取第一行 从0开始
int firstrow = sheet.getFirstRowNum();
// 获取最后一行
int lastrow = sheet.getLastRowNum();
// 循环行数依次获取列数
for (int i = firstrow; i < lastrow + 1; i++) {// 循环行数
// 获取哪一行i
Students stu=new Students();
Row row = sheet.getRow(i);
if (row != null) {
// 获取这一行的第一列 从0开始
int firstcell = row.getFirstCellNum();
// 获取这一行的最后一列
int lastcell = row.getLastCellNum();
// 创建一个集合,用处将每一行的每一列数据都存入集合中
for (int j = firstcell; j < lastcell; j++) {// 循环列数
// 获取第j列
Cell cell = row.getCell(j);
if (cell != null) {
if(j==0) {//第i行第一列
stu.setNumber(cell.toString());
}else if(j==1) {//第二列
stu.setName(cell.toString());
}else if(j==2) {//第三列
stu.setClazz(cell.toString());
}else if(j==3) {//第四列
stu.setAge(cell.toString());
}
}
}
list.add(stu);
}
}
fis.close();
return list;
}
private static Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1); //获取方法名
Method method = o.getClass().getMethod(getter, new Class[] {}); //获取方法对象
Object value = method.invoke(o, new Object[] {}); //用invoke调用此对象的get字段方法
return value; //返回值
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 将list集合转成Excel文件
* @param list 对象集合
* @param path 输出路径
* @return 返回文件路径
*/
public static String createExcel(List<? extends Object> list,String path){
String result = "";
if(list.size()==0||list==null){
result = "没有对象信息";
}else{
Object o = list.get(0);
Class<? extends Object> clazz = o.getClass();
String className = clazz.getSimpleName();
java.lang.reflect.Field[] fields=clazz.getDeclaredFields(); //这里通过反射获取字段数组
File folder = new File(path);
if(!folder.exists()){
folder.mkdirs();
}
String fileName = "2019-9-4";
String name = fileName.concat(".xls");
WritableWorkbook book = null;
File file = null;
try {
file = new File(path.concat(File.separator).concat(name));
book = Workbook.createWorkbook(file); //创建xls文件
WritableSheet sheet = book.createSheet(className,0);
int i = 0; //列
int j = 0; //行
for(java.lang.reflect.Field f:fields){
j = 0;
Label label = new Label(i, j,f.getName()); //这里把字段名称写入excel第一行中
sheet.addCell(label);
j = 1;
for(Object obj:list){
Object temp = getFieldValueByName(f.getName(),obj);
String strTemp = "";
if(temp!=null){
strTemp = temp.toString();
}
sheet.addCell(new Label(i,j,strTemp)); //把每个对象此字段的属性写入这一列excel中
j++;
}
i++;
}
book.write();
result = file.getPath();
} catch (Exception e) {
// TODO Auto-generated catch block
result = "SystemException";
e.printStackTrace();
}finally{
fileName = null;
name = null;
folder = null;
file = null;
if(book!=null){
try {
book.close();
} catch (WriteException e) {
// TODO Auto-generated catch block
result = "WriteException";
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
result = "IOException";
e.printStackTrace();
}
}
}
}
return result; //最后输出文件路径
}
}
ok了。