【问题标题】:Apache POI - Extracting all different values in a columnApache POI - 提取列中的所有不同值
【发布时间】:2014-02-07 15:25:43
【问题描述】:

我有一个看起来像这样的 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

我想提取以下信息

  1. 所有不同人的姓名(在第 3 列中,在本例中为 John、Mark 和 Betty)。

  2. 一个人有多少张票是 a.Open b.Working c.Pending。 (例如 - 对于 John,有 2 张票是开放的,1 张正在工作,0 张正在等待)。

我正在使用 Apache POI,请建议我如何获得上述信息。

【问题讨论】:

  • 首先,尝试更新帖子并尝试更新
  • 我删除了 jdbc 和数​​据库标签,因为这个问题与这些主题无关。

标签: java excel apache-poi


【解决方案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.
}

添加人员对象应该注意存储信息的方式,但您需要逐个单元格地获取值。

只是为了获取您的问题信息。

persons.size();

person.get(new Person("personName")).getTickets().get(TypeOfTicket)

【讨论】:

    【解决方案2】:

    如果您想要一个数据结构的所有唯一成员,您可以使用完全用于此目的的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 方法,以区分名称 - 第三列,它会做您想做的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-14
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多