2017-08-15 162 views
1

我想用java对象映射一个excel字段。什么是最好的做法,而不是依赖于列号。用java对象映射excel字段的最佳方式

Cell orderId=row.getCell(0); 
System.out.println("orderId" +orderId); 
Cell trackingId=row.getCell(1); 

Cell orderTitle = row.getCell(2); 

Cell customerName = row.getCell(3); 

Cell customerAddress = row.getCell(5); 

如何用对象变量映射列而不依赖列号?

我正在寻找的东西,我可以映射行标题与对象,其余应该是独立的行号。 有什么建议吗?

+1

抓住第一行的所有单元格,格式化为字符串,将其用作“标题”和列号之间的查找,然后依次处理每一行,从而以这种方式查找事物? – Gagravarr

+0

@Gagravarr在这种情况下,我再次依赖列号是否有办法在哪里我shud较少依赖列号和更多的列标题来读取Excel数据。 –

回答

0

如果我正确理解你的问题,你想要将一个属性映射到一个列,以便通过引用属性而不是列号来获取订单的属性。

int orderIdColumn = 0; 
int trackingIdColumn = 1; 
int orderTitleColumn = 2; 
int customerNameColumn = 3; 
int customerAddressColumn = 5; 

根据你的需要,你也可以声明int场表示包含标题单元格的行。

如果声明这些变量取决于程序其余部分的设计,但它显然必须位于表示订单的对象之外,因为它们不是特定于订单的,而是Excel电子表格。

+0

感谢您的回答,但我想知道最好的方式来匹配对象属性与列没有bieng依赖于列号bcoz可能是“orderId”属性是在Excel中列号1和另一个表中它在3号。我希望你能明白我的观点 –

+2

@irfanshafi根据那个评论,我会这么想的,但接下来,我会提出一些类似于Gagravarr的建议,基本上和我的答案一样,除了变量会被分配而不是被硬编码到程序中。但在那里,你回答说你仍然依赖列号,所以我不认为我明白你想要什么。您正在从Excel文件中读取数据,因此您当然需要在某个点或另一个点上依赖列号。唯一的问题是你从Excel格式中抽象出你需要的逻辑。 – Stingy

1

如果要将列与对象变量进行映射而不依赖于列编号,那么您需要有一些方法将类fieldName与Excel文件头名称相匹配并相应地设置值。一个方法是使用reflection

  1. 使用反射,
  2. 迭代通过Excel文件中的所有行阅读给定类的所有领域。
  3. 将字段名称与标题匹配,并获取所有字段的标题索引。
  4. 从每个索引的单元格获取值。
  5. 最后使用反射将值设置到对象的每个字段。
  6. 返回对象列表。

我创建了一个简单的Java library来将Excel文件转换成前一段时间的对象列表。这可能会帮助你。