java从Excle中读取到数据,导出到另一个Excle中

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了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值