我有一个看起来像这样的excel文件 -
Ticket # Status Person
1. Open John
2. Working Mark
3. Pending Betty
4. Working Mark
5. Open Mark
6. Open John
7. Pending Betty
8. Working John
9. Working Mark
10. Pending Betty
我想提取以下信息
所有不同人士的姓名(在第3栏,在本案例中为John,Mark和Betty)。
一个人的票数是多少。打开b.Working c.Pending。 (例如 - 约翰,2张门票是开放的,1张是有效的,0张是等待的。)
我正在使用Apache POI,请建议我如何获得上述信息。
答案 0 :(得分:1)
尝试使用此类逐行加载。
public class Person{
private String name;
private Map<TypeOfTicket,Integer> tickets;
//Implements equals based on name property
}
public enum TypeOfTicket{
Pending,
Open,
Working
}
Cell有一个返回字符串的方法,创建一个读取Name的实现,如果你没有在列表中创建新对象,如果你在票证类型的数量上加了一个。
List<Person> persons = new ArrayList<Person>();
String personName =cell.getStringCellValue();
if(person.contains(new Person(personName){
//Add logic here to obtain the person object
and read the type of the ticket and add one.
}
添加person对象应该处理存储信息的方式,但是你需要逐个单元地获取值。
只是为了获得您的问题的信息。
persons.size();
和
person.get(new Person("personName")).getTickets().get(TypeOfTicket)
答案 1 :(得分:1)
如果您想要数据结构的所有唯一成员,请使用完全用于此目的的TreeSet:
A collection that contains no duplicate elements. The elements are ordered using their
natural ordering, or by a Comparator provided at set creation time, depending on
which constructor is used.
定义用于区分名称的Comparator和hashCode方法 - 第3列,它将执行您想要的操作。