我有一個 excel 檔案,我必須決議為物件串列: excel: excel
我的pojo:
我的服務:
public List<RegisterModel> parse(MultipartFile file) throws IOException {
Workbook workbook = new HSSFWorkbook(file.getInputStream());
Sheet worksheet = workbook.getSheetAt(0);
List<RegisterModel> registerModelList = new ArrayList<>();
RegisterModel registerModel = new RegisterModel();
for (int i = 3; i < worksheet.getPhysicalNumberOfRows(); i ) {
Row row = worksheet.getRow(i);
String headers = String.valueOf(row.getCell(0));
String values = String.valueOf(row.getCell(1));
if (headers.equals("OPERDAY")){
registerModel.setDate(values);
}
if (headers.equals("SUIP")){
registerModel.setSuip(values);
}
if (headers.equals("STATE")){
registerModel.setSuip(values);
}
if (headers.equals("NOM_OPER")){
registerModel.setTransactionID(values);
}
registerModelList.add(registerModel);
}
System.out.println(registerModelList);
return registerModelList;
}
但它不起作用(
結果:值重復
[RegisterModel(日期=2022-03-01T23:48:47, suip=Проведён, state=null, transactionID=1888314188),
RegisterModel(日期=2022-03-01T23:48:47, suip=Проведён, state=null, transactionID=1888314188),
RegisterModel(日期=2022-03-01T23:48:47, suip=Проведён, state=null, transactionID=1888314188)]
uj5u.com熱心網友回復:
該問題是由僅在回圈registerModel外部創建單個實體引起的。for您只需一遍又一遍地編輯該物件,而不是創建它的新實體。解決這個問題的方法是在registerModel每次前一個物件完成或新物件啟動之前創建一個新實體。
有多種方法可以通過使用嵌套回圈或一次將for回圈增加 5 個(按您的順序排列)并特別跟蹤專案的位置來實作此目的。但是,如果我們假設訂單中的最后一位資料是“NOM_OPER”行,那么我們可以執行以下快速簡便的解決方案。
這是已更改的代碼:
if (headers.equals("NOM_OPER")){
registerModel.setTransactionID(values);
//Now that the object is complete we can add it to the list (moved here from below)
registerModelList.add(registerModel);
//The lastly we NEED to create a new instance of registerModel for the next order to use
registerModel = new RegisterModel();
}
//Remove the below line after the if statements.
//You should only add the model to the list once the object is complete. Don't add it on every row.
//registerModelList.add(registerModel);
完整的方法如下所示:
public List<RegisterModel> parse(MultipartFile file) throws IOException {
Workbook workbook = new HSSFWorkbook(file.getInputStream());
Sheet worksheet = workbook.getSheetAt(0);
List<RegisterModel> registerModelList = new ArrayList<>();
RegisterModel registerModel = new RegisterModel();
for (int i = 3; i < worksheet.getPhysicalNumberOfRows(); i ) {
Row row = worksheet.getRow(i);
String headers = String.valueOf(row.getCell(0));
String values = String.valueOf(row.getCell(1));
if (headers.equals("OPERDAY")){
registerModel.setDate(values);
}
if (headers.equals("SUIP")){
registerModel.setSuip(values);
}
if (headers.equals("STATE")){
registerModel.setSuip(values);
}
if (headers.equals("NOM_OPER")){
registerModel.setTransactionID(values);
//Now that the object is complete we can add it to the list (moved here from below)
registerModelList.add(registerModel);
//The lastly we NEED to create a new instance of registerModel for the next order to use
registerModel = new RegisterModel();
}
//Remove the below line after the if statements.
//You should only add the model to the list once the object is complete. Don't add it on every row.
//registerModelList.add(registerModel);
}
System.out.println(registerModelList);
return registerModelList;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/461209.html
上一篇:匹配函式查找輸入今天日期的單元格
下一篇:如何確保我的代碼始終正常運行
