日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java通過反射將 Excel 解析成對象集合實例

瀏覽:183日期:2022-05-26 18:13:37

1.這是一個通過Java反射機制解析的工具類

2.使用時只需創建對應的對象,并在Excel的第一行填上對應的屬性名

3.首先要添加相關的jar包:

poi-3.8.jar

poi-ooxml-3.9.jar

poi-ooxml-schemas-3.9.jar

xmlbeans-2.6.0.jar

4.看一下Excel的內容:

Java通過反射將 Excel 解析成對象集合實例

5.創建對應的實體類:

package com.office.user.dto;public class UserDTO { private String idUser; private String userName; private String gender; private String birthDate; private String idType; private String idNo; private String mobile; public String getIdUser() {return idUser;} public void setIdUser(String idUser) {this.idUser = idUser;} public String getUserName() {return userName;} public void setUserName(String userName) {this.userName = userName;} public String getGender() {return gender;} public void setGender(String gender) {this.gender = gender;} public String getBirthDate() {return birthDate;} public void setBirthDate(String birthDate) {this.birthDate = birthDate;} public String getIdType() {return idType;} public void setIdType(String idType) {this.idType = idType;} public String getIdNo() {return idNo;} public void setIdNo(String idNo) {this.idNo = idNo;} public String getMobile() {return mobile;} public void setMobile(String mobile) {this.mobile = mobile;} @Overridepublic String toString() {return 'UserDTO [idUser=' + idUser + ', userName=' + userName + ', gender=' + gender + ', birthDate='+ birthDate + ', idType=' + idType + ', idNo=' + idNo + ', mobile=' + mobile + ']';}}

6.編寫工具類:ExcelReader.java

package com.office.poi; import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.DataFormatter;import org.apache.poi.ss.usermodel.DateUtil;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.ss.usermodel.WorkbookFactory; import com.office.user.dto.UserDTO; /** * Excel 解析工具 * * @author Neo 2017-5-15 * * 所需jar: poi-3.8.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.jar * xmlbeans-2.6.0.jar * */public class ExcelReader { private String filePath;private String sheetName;private Workbook workBook;private Sheet sheet;private List<String> columnHeaderList;private List<List<String>> listData;private List<Map<String, String>> mapData;private boolean flag; public ExcelReader(String filePath, String sheetName) {this.filePath = filePath;this.sheetName = sheetName;this.flag = false;this.load();}private void load() {FileInputStream inStream = null;try {inStream = new FileInputStream(new File(filePath));workBook = WorkbookFactory.create(inStream);sheet = workBook.getSheet(sheetName);} catch (Exception e) {e.printStackTrace();} finally {try {if (inStream != null) {inStream.close();}} catch (IOException e) {e.printStackTrace();}}}private String getCellValue(Cell cell) {String cellValue = '';DataFormatter formatter = new DataFormatter();if (cell != null) {switch (cell.getCellType()) {case Cell.CELL_TYPE_NUMERIC:if (DateUtil.isCellDateFormatted(cell)) {cellValue = formatter.formatCellValue(cell);} else {double value = cell.getNumericCellValue();int intValue = (int) value;cellValue = value - intValue == 0 ? String.valueOf(intValue) : String.valueOf(value);}break;case Cell.CELL_TYPE_STRING:cellValue = cell.getStringCellValue();break;case Cell.CELL_TYPE_BOOLEAN:cellValue = String.valueOf(cell.getBooleanCellValue());break;case Cell.CELL_TYPE_FORMULA:cellValue = String.valueOf(cell.getCellFormula());break;case Cell.CELL_TYPE_BLANK:cellValue = '';break;case Cell.CELL_TYPE_ERROR:cellValue = '';break;default:cellValue = cell.toString().trim();break;}}return cellValue.trim();}private void getSheetData() {listData = new ArrayList<List<String>>();mapData = new ArrayList<Map<String, String>>();columnHeaderList = new ArrayList<String>();int numOfRows = sheet.getLastRowNum() + 1;for (int i = 0; i < numOfRows; i++) {Row row = sheet.getRow(i);Map<String, String> map = new HashMap<String, String>();List<String> list = new ArrayList<String>();if (row != null) {for (int j = 0; j < row.getLastCellNum(); j++) {Cell cell = row.getCell(j);if (i == 0) {columnHeaderList.add(getCellValue(cell));} else {map.put(columnHeaderList.get(j), this.getCellValue(cell));}list.add(this.getCellValue(cell));}}if (i > 0) {mapData.add(map);}listData.add(list);}flag = true;}public String getCellData(int row, int col) {if (row <= 0 || col <= 0) {return null;}if (!flag) {this.getSheetData();}if (listData.size() >= row && listData.get(row - 1).size() >= col) {return listData.get(row - 1).get(col - 1);} else {return null;}}public String getCellData(int row, String headerName) {if (row <= 0) {return null;}if (!flag) {this.getSheetData();}if (mapData.size() >= row && mapData.get(row - 1).containsKey(headerName)) {return mapData.get(row - 1).get(headerName);} else {return null;}} /** * 獲取標題 * * @param eh * @param maxX * @return */public List<String> getTitleList(ExcelReader eh, int maxX) {List<String> result = new ArrayList<String>();for (int i = 1; i <= maxX; i++) {result.add(eh.getCellData(1, i));}return result;} /** * 獲取單行對象 * * @param object * @param eh * @param maxX * @param titles * @return */public Object getObject(String className, ExcelReader eh, int y, List<String> titles) throws Exception {Object bean = Class.forName(className).newInstance();int length = titles.size();for (int x = 0; x < length; x++) {try {Field field = bean.getClass().getDeclaredField(titles.get(x));field.setAccessible(true);field.set(bean, eh.getCellData(y, x+1));} catch (Exception e) {System.out.println('沒有對應的方法:' + e);}}return bean;} /** * 獲取Excel數據列表 * * @param bean * @param eh * @param x * 每行有多少列數據 * @param y * 整個sheet有多少行數據 * @param titles * @return */public List<Object> getDataList(Class<?> clazz, ExcelReader eh, int x, int y, List<String> titles) {List<Object> result = new ArrayList<Object>();String className = clazz.getName();try {for (int i = 2; i <=y; i++) {Object object = eh.getObject(className, eh, i, titles);result.add(object);}} catch (Exception e) {System.out.println(e);}return result;}public static void main(String[] args) {try {ExcelReader eh = new ExcelReader('C:UsersNeoDesktopPOI.xlsx', 'Sheet1');List<String> titles = eh.getTitleList(eh, 7);List<Object> userList = eh.getDataList(UserDTO.class, eh, 7, 4, titles);for (Object object : userList) {System.out.println(object);}} catch (Exception e) {System.out.println(e);}}}

6.看一下測試結果:

Java通過反射將 Excel 解析成對象集合實例

備注:這是我寫于兩年前的測試demo,如果生產上有類似需求更建議使用 EasyExcel

補充知識:簡單好用-JAVA使用POI解析Excel

相信使用POI的目前已經非常多了,我這邊提供一個非常簡單便利又通用的POI解析工具類,代碼最后有示例代碼。可以按照本文直接使用。

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map; import org.apache.log4j.LogManager;import org.apache.log4j.Logger;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFDateUtil;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * * Title: ExcelReader<br> * Description: 可以讀取xls,xlsx等文件<br> * Copyright @ 2012~2016 xiaour.github.com<span style='font-size: 1em;'> .All rights reserved.<br></span> * @author 小魚兒 * @createDate 2016年8月23日 * @version v1.0 */public class ExcelReader { private POIFSFileSystem fs; private HSSFWorkbook wb; private HSSFSheet sheet; private HSSFRow row; private static Logger logger = LogManager.getLogger(ExcelReader.class); private String fileFullPath; private int sheetNo; public ExcelReader(String fileFullPath, int sheetNo) { super(); this.fileFullPath = fileFullPath; this.sheetNo = sheetNo; } /** * 讀取Excel數據內容 * @param InputStream * @param sheetNo sheet 頁號 * @return Map 包含單元格數據內容的Map對象 */ public List<Map<String,Object>> readExcel() { logger.info('開始解析xls...'); sheetNo--;//從1開始及從0開始 InputStream is = null; try { is = new FileInputStream(fileFullPath); } catch (FileNotFoundException e1) { logger.error(e1); } Map<String,Object> dataMap = null; List<Map<String,Object>> dataList= new ArrayList<>(); String value = ''; try { fs = new POIFSFileSystem(is); wb = new HSSFWorkbook(fs); } catch (IOException e) { logger.error(e); } sheet = wb.getSheetAt(sheetNo); row = sheet.getRow(0); // 標題總列數 int colNum = row.getPhysicalNumberOfCells(); String[] keyArray = new String[colNum]; for (int i = 0; i < colNum; i++) { keyArray[i] = getCellFormatValue(row.getCell((short) i)); } int rowNum = sheet.getLastRowNum(); // 正文內容應該從第二行開始,第一行為表頭的標題 for (int i = 2; i <= rowNum; i++) { dataMap= new HashMap<>(); row = sheet.getRow(i); if(row!=null){ int j = 0; while (j < colNum) { //這里把列循環到Map if(row.getCell((short) j)!=null){ value = getCellFormatValue(row.getCell((short) j)).trim(); dataMap.put(keyArray[j],value); } j++; } value = ''; dataList.add(dataMap); } } logger.info('解析xls完成...'); try { if(is!=null) is.close(); } catch (IOException e) { logger.error(e.toString()); } return dataList; } /** * 根據HSSFCell類型設置數據 * @param cell * @return */ private String getCellFormatValue(HSSFCell cell) { String cellvalue = ''; if (cell != null) { // 判斷當前Cell的Type switch (cell.getCellType()) { // 如果當前Cell的Type為NUMERIC case HSSFCell.CELL_TYPE_NUMERIC: case HSSFCell.CELL_TYPE_FORMULA: { // 判斷當前的cell是否為Date if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); SimpleDateFormat sdf = new SimpleDateFormat('yyyy-MM-dd'); cellvalue = sdf.format(date); } // 如果是純數字 else { // 取得當前Cell的數值 DecimalFormat df = new DecimalFormat('0'); String dfStr = df.format(cell.getNumericCellValue()); cellvalue = dfStr; } break; } // 如果當前Cell的Type為STRIN case HSSFCell.CELL_TYPE_STRING: // 取得當前的Cell字符串 cellvalue = cell.getRichStringCellValue().getString(); break; // 默認的Cell值 default: cellvalue = ' '; } } else { cellvalue = ''; } return cellvalue; } public static void main(String[] args) { List<Map<String, Object>> dataList; // 對讀取Excel表格標題測試 ExcelReader excelReader = new ExcelReader('D:okcoin-2016-08-3XZS.xls',1); dataList = excelReader.readExcel(); for(Map<String,Object> theMap:dataList){ System.out.println(theMap); } }}

這個類導入相應的jar之后就可以用了哦。

以上這篇Java通過反射將 Excel 解析成對象集合實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: excel
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美一区在线观看视频| 免费在线观看一区| 视频二区不卡| 国产精品多人| 国产乱码精品一区二区亚洲| 欧美片网站免费| 国产精品成人3p一区二区三区| 欧美欧美黄在线二区| 国产精品一国产精品k频道56| 国产精品一区二区中文字幕| 国产午夜久久av| 国产精品99久久久久久董美香| 国产精品天天看天天狠| 精品入口麻豆88视频| 精品久久久网| 亚洲国产福利| 亚洲欧洲高清| 极品裸体白嫩激情啪啪国产精品| 香蕉视频亚洲一级| 免费成人网www| 在线观看视频免费一区二区三区| 蜜桃av一区二区三区电影| 视频精品一区| 欧美xxxx性| 日韩欧美不卡| 夜夜精品视频| 欧美日韩99| 精品视频网站| 免费不卡中文字幕在线| 蜜桃久久精品一区二区| 国产欧美在线观看免费| 国产一区二区三区国产精品| 亚洲涩涩在线| 伊人影院久久| 亚洲精品乱码| 国产精品毛片视频| 久久久久久美女精品| 在线天堂中文资源最新版| 欧美日韩在线二区| 日本欧洲一区二区| 欧美日韩午夜电影网| 91日韩欧美| 亚洲深夜福利| 久久精品超碰| 欧美日韩视频网站| 国产精品美女| 国产精品极品在线观看| 久久在线免费| 日本v片在线高清不卡在线观看| 久久精品凹凸全集| 日韩大片在线播放| 一区二区三区国产盗摄| 另类综合日韩欧美亚洲| 999国产精品999久久久久久| 另类av一区二区| 国产精品欧美日韩一区| 日韩欧美一区二区三区免费观看| 首页亚洲欧美制服丝腿| 麻豆成人av在线| 免费久久久久久久久| 欧美日韩在线精品一区二区三区激情综合 | 亚洲影院天堂中文av色| 久久精品一本| 国产精品外国| 正在播放日韩精品| 国模大尺度视频一区二区| 91精品啪在线观看国产18| 日韩av网站免费在线| 免费在线小视频| 日本精品另类| 欧美+日本+国产+在线a∨观看| 欧美日韩精品一区二区三区视频 | 鲁大师成人一区二区三区| 欧美精品导航| 国内激情久久| 国产精品99精品一区二区三区∴| 一区在线观看| 樱桃视频成人在线观看| 日本亚洲视频| 久久婷婷一区| 免费观看亚洲天堂| 日av在线不卡| 亚洲成人国产| 久久精品人人| 婷婷精品在线观看| 亚洲午夜久久久久久尤物| 国产精品一区二区三区av麻| 四虎在线精品| 国产精品毛片一区二区在线看| 日韩一区精品视频| 日韩精品首页| 麻豆久久一区| 亚洲精品高潮| 日韩欧美看国产| 久久国产免费看| 伊人精品久久| 伊人久久成人| 免费污视频在线一区| 美女毛片一区二区三区四区最新中文字幕亚洲| 丝袜亚洲另类欧美| 欧美日韩亚洲在线观看| 色婷婷色综合| 国产精品一卡| 亚洲精品日本| 香蕉久久夜色精品国产| 91精品综合| 97视频热人人精品免费| 国产精品亚洲综合久久| 蜜臀av一区二区三区| 欧美在线观看视频一区| 日韩高清中文字幕一区二区| 免费亚洲一区| 日韩中文字幕1| 国产综合婷婷| 日韩精品一区二区三区免费观影| 国产精品久久久久9999高清| 亚洲精品国产日韩| 中文精品在线| 久久一级电影| 精精国产xxxx视频在线野外 | 99re国产精品| 免费av一区二区三区四区| 四季av一区二区凹凸精品| 久久国产生活片100| 日韩av黄色在线| 日韩av电影一区| 亚洲+小说+欧美+激情+另类| 亚洲综合图色| 日韩精品一区二区三区av | 欧美日韩国产亚洲一区| 亚洲国产一区二区在线观看| 极品日韩av| 日韩午夜免费| 国产精品日韩久久久| 亚洲欧美日韩视频二区| 喷白浆一区二区| 在线成人直播| 水野朝阳av一区二区三区| 免费观看在线色综合| 亚洲三级av| 国产日产高清欧美一区二区三区 | 蜜臀久久久久久久| 国产高清日韩| 91成人福利| 国产精品亚洲综合久久| 久久伊人国产| 欧美日韩在线观看首页| 99久久精品费精品国产| 久久一级电影| 日韩毛片视频| 午夜欧美视频| 日韩在线卡一卡二| 日韩精品视频网站| 国产精品久久久久久久久久齐齐| 欧美激情视频一区二区三区在线播放| 久久久久久夜| 国产二区精品| 蜜桃视频第一区免费观看| 日韩精品视频网站| 你懂的网址国产 欧美| 国产a久久精品一区二区三区| av一区在线| 男女性色大片免费观看一区二区| 日韩高清不卡在线| 日韩亚洲精品在线观看| 你懂的国产精品| 久久久精品网| 亚洲综合精品四区| 伊人精品一区| 欧美性感美女一区二区| 免费久久99精品国产| 美日韩一区二区三区| www.com.cn成人| 99香蕉国产精品偷在线观看| 国产亚洲观看| 欧美1级日本1级| 久久激情综合网| 成人久久久久| 亚洲aa在线| 国内自拍视频一区二区三区| 国产一在线精品一区在线观看| 日韩精品欧美精品| 日韩一区欧美| 日韩一二三区在线观看| 日韩国产一区二区三区| 日韩1区2区3区| 黄色在线观看www| 成人在线视频区| 亚洲婷婷在线| 国产精品午夜一区二区三区| 久久精品国产在热久久| 一区在线观看| 国产日韩亚洲欧美精品| 国产乱码午夜在线视频| 天堂成人国产精品一区| 日韩精品中文字幕吗一区二区| 里番精品3d一二三区| 日本高清不卡一区二区三区视频| 日本在线一区二区三区| 日韩综合一区|