Java解析Excel

起床搬砖 2018-07-11 01:35:23
在解析的过程如何将两个sheet中之间相同的数据关联在一起
比如
表中sheet1中有柜号 型号 总量
sheet2中有型号(对应sheet1中的型号) 库位(一个型号可有多个库位) 存储数量(从sheet1总量中拿 装满了就存入下个库位) 日期
现在的需求是将Excel读取后 进行逻辑判断 将sheet1总量给分配到sheet2中 分完为止后 生成一个新表显示 柜号 型号 库位 数量
有懂的大神教学一下吗?新手请教,感谢大神。
...全文
381 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
起床搬砖 2018-07-30
  • 打赏
  • 举报
回复
起床搬砖 2018-07-13
  • 打赏
  • 举报
回复
引用 9 楼 qq593467574 的回复:
public static void main(String[] args) {
List<Sheet1> ls1=getSheet1();
List<Sheet2> ls2=getSheet2();
List<SheetAll> lsa=new ArrayList<SheetAll>();
SheetAll sa=null;
for (Sheet1 sheet1 : ls1) {
Double total=sheet1.getTotal();
for(Sheet2 sheet2 : ls2){

Double qty=sheet2.getQuantity();
Double times=total/qty;
if(sheet1.getModelNo()!=null && sheet1.getModelNo().equals(sheet2.getModel())){

for(int i=0;i<times;i++){
sa=new SheetAll();
sa.setContainerNo(sheet1.getContainerNo());
sa.setModelNo(sheet1.getModelNo());
sa.setLocation(sheet2.getLocation());
sa.setDate(sheet2.getDate());
if(total>qty){
sa.setQuantity(qty);
total=total-sheet2.getQuantity();
}else{
sa.setQuantity(total);
}
lsa.add(sa);
}
}
}
}

for (SheetAll sheetAll : lsa) {
System.out.println(sheetAll.getContainerNo()+"\t"+sheetAll.getModelNo()+"\t"+sheetAll.getLocation()+"\t"+sheetAll.getQuantity()+"\t"+sheetAll.getDate());
}


}

public static List<Sheet1> getSheet1(){
List<Sheet1> ls=new ArrayList<Sheet1>();
ls.add(new Sheet1("CN1", "MN1", 2000.0));
ls.add(new Sheet1("CN2", "MN2", 5000.0));
ls.add(new Sheet1("CN3", "MN3", 8000.0));
return ls;
}

public static List<Sheet2> getSheet2(){
List<Sheet2> ls=new ArrayList<Sheet2>();
ls.add(new Sheet2("MN1", "L1", 800.0,"2018-07-08"));
ls.add(new Sheet2("MN2", "l2", 1500.0,"2018-07-09"));
ls.add(new Sheet2("MN3", "l3", 1000.0,"2018-07-10"));
return ls;
}

Sheet1:

private String ContainerNo;
private String ModelNo;
private Double total;

Sheet2:

private String model;
private String location;
private Double quantity;
private String date;

SheetAll:

private String ContainerNo;
private String ModelNo;
private String location;
private Double quantity;
private String date;



大神你这个已经很帅了... 但是如果我要的数据不是自己手动添加的,是解析Excel后放入你sheet1和sheet2中 这个要怎么设置进去啊
奔跑的小鱼儿 2018-07-12
  • 打赏
  • 举报
回复
新建两个对象实体类,把两个sheet中的数据分别存到两个对象list中,再对这两个list进行逻辑处理,最后把两个list导出
起床搬砖 2018-07-12
  • 打赏
  • 举报
回复
我能用poi读取两个sheet中的数据 但是做不到中间的逻辑判断和导出
大神求救啊
qq593467574 2018-07-12
  • 打赏
  • 举报
回复
public static void main(String[] args) {
List<Sheet1> ls1=getSheet1();
List<Sheet2> ls2=getSheet2();
List<SheetAll> lsa=new ArrayList<SheetAll>();
SheetAll sa=null;
for (Sheet1 sheet1 : ls1) {
Double total=sheet1.getTotal();
for(Sheet2 sheet2 : ls2){

Double qty=sheet2.getQuantity();
Double times=total/qty;
if(sheet1.getModelNo()!=null && sheet1.getModelNo().equals(sheet2.getModel())){

for(int i=0;i<times;i++){
sa=new SheetAll();
sa.setContainerNo(sheet1.getContainerNo());
sa.setModelNo(sheet1.getModelNo());
sa.setLocation(sheet2.getLocation());
sa.setDate(sheet2.getDate());
if(total>qty){
sa.setQuantity(qty);
total=total-sheet2.getQuantity();
}else{
sa.setQuantity(total);
}
lsa.add(sa);
}
}
}
}

for (SheetAll sheetAll : lsa) {
System.out.println(sheetAll.getContainerNo()+"\t"+sheetAll.getModelNo()+"\t"+sheetAll.getLocation()+"\t"+sheetAll.getQuantity()+"\t"+sheetAll.getDate());
}


}

public static List<Sheet1> getSheet1(){
List<Sheet1> ls=new ArrayList<Sheet1>();
ls.add(new Sheet1("CN1", "MN1", 2000.0));
ls.add(new Sheet1("CN2", "MN2", 5000.0));
ls.add(new Sheet1("CN3", "MN3", 8000.0));
return ls;
}

public static List<Sheet2> getSheet2(){
List<Sheet2> ls=new ArrayList<Sheet2>();
ls.add(new Sheet2("MN1", "L1", 800.0,"2018-07-08"));
ls.add(new Sheet2("MN2", "l2", 1500.0,"2018-07-09"));
ls.add(new Sheet2("MN3", "l3", 1000.0,"2018-07-10"));
return ls;
}

Sheet1:

private String ContainerNo;
private String ModelNo;
private Double total;

Sheet2:

private String model;
private String location;
private Double quantity;
private String date;

SheetAll:

private String ContainerNo;
private String ModelNo;
private String location;
private Double quantity;
private String date;

dev_pump 2018-07-12
  • 打赏
  • 举报
回复
两个sheet的数据都可以拿到,为什么不能判断呢?卡在哪一步了
奔跑的小鱼儿 2018-07-12
  • 打赏
  • 举报
回复
引用 5 楼 Yuanshenxin 的回复:
那两个对象的型号要怎么对应起来啊?


型号就是对象的一个字段啊,双重循环一个个对比型号是否相等不就好了
  • 打赏
  • 举报
回复
用POI的jar 。xlxs格式的用POI 的xFFS包。很简单使用。读表。然后读sheet页。然后修改然后输出
起床搬砖 2018-07-12
  • 打赏
  • 举报
回复
那两个对象的型号要怎么对应起来啊?
起床搬砖 2018-07-11
  • 打赏
  • 举报
回复
可以详细具体一点吗?
自由自在_Yu 2018-07-11
  • 打赏
  • 举报
回复
你把数据读取出来,放到两个集合里面,循环遍历一下呗

50,707

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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