用java对象映射excel字段的最佳方式
我想用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);
如何用对象变量映射列而不依赖列号?
我正在寻找的东西,我可以映射行标题与对象,其余应该是独立的行号。 有什么建议吗?
如果我正确理解你的问题,你想要将一个属性映射到一个列,以便通过引用属性而不是列号来获取订单的属性。
int orderIdColumn = 0;
int trackingIdColumn = 1;
int orderTitleColumn = 2;
int customerNameColumn = 3;
int customerAddressColumn = 5;
根据你的需要,你也可以声明int
场表示包含标题单元格的行。
如果声明这些变量取决于程序其余部分的设计,但它显然必须位于表示订单的对象之外,因为它们不是特定于订单的,而是Excel电子表格。
感谢您的回答,但我想知道最好的方式来匹配对象属性与列没有bieng依赖于列号bcoz可能是“orderId”属性是在Excel中列号1和另一个表中它在3号。我希望你能明白我的观点 –
@irfanshafi根据那个评论,我会这么想的,但接下来,我会提出一些类似于Gagravarr的建议,基本上和我的答案一样,除了变量会被分配而不是被硬编码到程序中。但在那里,你回答说你仍然依赖列号,所以我不认为我明白你想要什么。您正在从Excel文件中读取数据,因此您当然需要在某个点或另一个点上依赖列号。唯一的问题是你从Excel格式中抽象出你需要的逻辑。 – Stingy
如果要将列与对象变量进行映射而不依赖于列编号,那么您需要有一些方法将类fieldName与Excel文件头名称相匹配并相应地设置值。一个方法是使用reflection
:
- 使用反射,
- 迭代通过Excel文件中的所有行阅读给定类的所有领域。
- 将字段名称与标题匹配,并获取所有字段的标题索引。
- 从每个索引的单元格获取值。
- 最后使用反射将值设置到对象的每个字段。
- 返回对象列表。
我创建了一个简单的Java library来将Excel文件转换成前一段时间的对象列表。这可能会帮助你。
抓住第一行的所有单元格,格式化为字符串,将其用作“标题”和列号之间的查找,然后依次处理每一行,从而以这种方式查找事物? – Gagravarr
@Gagravarr在这种情况下,我再次依赖列号是否有办法在哪里我shud较少依赖列号和更多的列标题来读取Excel数据。 –