2017-08-15 56 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文件轉換成前一段時間的對象列表。這可能會幫助你。