成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:162日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
777午夜精品免费视频| 国产免费成人在线视频| 日本一区二区三区四区在线视频| 韩国三级电影一区二区| 久久久久久久久一区二区| 亚洲免费观看高清| 亚洲高清av| 中文字幕中文字幕一区| av激情综合网| 精品国产亚洲一区二区三区在线观看| 国产精品中文字幕一区二区三区| 欧美日韩一区二区在线观看视频| 偷拍亚洲欧洲综合| 国产麻豆综合| 中文字幕在线播放不卡一区| 欧美黄色aaaa| 中文字幕免费不卡在线| 91浏览器在线视频| 欧美xxxxx牲另类人与| 国产成人免费在线| 日韩一区二区三区在线| 国产精品一卡二卡| 欧美精品第一页| 国产精品 欧美精品| 91精品中文字幕一区二区三区| 国产露脸91国语对白| 欧美一区二区三区电影| 高清久久久久久| 日韩视频永久免费| 国产 欧美在线| 日韩欧美亚洲国产精品字幕久久久| 国产成人精品网址| 精品国产青草久久久久福利| 97精品国产露脸对白| 国产欧美1区2区3区| 亚洲国产三级| 亚洲一区免费观看| 日本韩国精品在线| 国产在线精品一区二区三区不卡| 欧美一区二区三区四区高清 | 欧美一区二区视频在线观看2022| 国内精品免费在线观看| 欧美一区二区国产| 99久久综合国产精品| 日本一区二区三区免费乱视频 | 国产精品亚洲综合一区在线观看| 欧美变态凌虐bdsm| 欧美日韩一区二区三区在线观看免| 中文字幕一区二区三区不卡 | 日韩欧美激情在线| av成人老司机| 综合激情成人伊人| 麻豆9191精品国产| 麻豆91精品91久久久的内涵| 欧美日韩黄色影视| 99久久久久免费精品国产| 欧美国产激情二区三区| 亚洲精品黄色| 性欧美疯狂xxxxbbbb| 欧美色视频一区| 成人精品小蝌蚪| 中文av字幕一区| 亚洲一区二区四区| 捆绑紧缚一区二区三区视频| 精品久久久久一区| 欧美日韩亚洲在线| 亚洲v精品v日韩v欧美v专区| 欧美三电影在线| 91小视频在线| 亚洲综合色噜噜狠狠| 欧美视频在线观看一区二区| thepron国产精品| 亚洲欧洲成人av每日更新| 91精品福利在线| 99久久99久久久精品齐齐| 中文字幕一区免费在线观看| 91久久线看在观草草青青| 成人激情校园春色| 亚洲美女偷拍久久| 欧美日韩免费在线视频| 91麻豆精东视频| 亚洲成人在线免费| 日韩欧美黄色影院| 国产一区二区高清不卡| 国产精品一区二区三区99| 中文字幕乱码亚洲精品一区| 色偷偷一区二区三区| 91欧美激情一区二区三区成人| 亚洲曰韩产成在线| 欧美一级高清大全免费观看| 亚洲天堂偷拍| 狠狠网亚洲精品| 国产精品人成在线观看免费 | 91传媒视频在线播放| 色综合久久中文综合久久牛| 天天综合网天天综合色| 精品电影一区二区| 亚洲一区视频| 暴力调教一区二区三区| 亚洲成人免费在线| 久久日一线二线三线suv| 欧美亚洲三区| 91丨九色porny丨蝌蚪| 五月综合激情婷婷六月色窝| 精品国产一区a| 久久久久国产精品一区三寸| 91亚洲国产成人精品一区二区三| 天堂成人免费av电影一区| 精品捆绑美女sm三区| 久久天堂成人| 欧美二区视频| 精品在线免费视频| 亚洲天堂中文字幕| 日韩一区二区视频在线观看| 国产欧美一区二区三区另类精品| 国v精品久久久网| 亚洲成人7777| 国产日产欧美一区| 欧美三级电影在线看| 一区二区高清视频| 99久久久精品| 美脚の诱脚舐め脚责91| 亚洲免费三区一区二区| 日韩一区二区三区在线视频| 校园激情久久| 女人天堂亚洲aⅴ在线观看| 久久se精品一区精品二区| 亚洲乱码中文字幕综合| 久久先锋影音av鲁色资源| 欧美性高清videossexo| 一区二区三区你懂的| 白白色亚洲国产精品| 麻豆极品一区二区三区| 亚洲免费三区一区二区| 国产色91在线| 91精品免费在线观看| 久久国产毛片| 影音先锋中文字幕一区| 成人av电影免费在线播放| 久久se这里有精品| 日韩专区中文字幕一区二区| 中文字幕不卡在线| 亚洲精品一线二线三线无人区| 在线看国产一区| 亚洲女同同性videoxma| 韩国欧美一区| 91香蕉国产在线观看软件| 成人午夜私人影院| 韩国成人精品a∨在线观看| 视频一区在线播放| 最新日韩av在线| 国产色产综合产在线视频| 欧美草草影院在线视频| 欧美亚洲高清一区二区三区不卡| 一本色道久久| 亚洲午夜一级| 欧美成人嫩草网站| 9l国产精品久久久久麻豆| 国产精品羞羞答答xxdd| 九九九久久久精品| 麻豆国产欧美日韩综合精品二区| 亚洲国产成人精品视频| 亚洲激情五月婷婷| 专区另类欧美日韩| 亚洲视频一二三区| 亚洲欧美日韩一区二区| 中文字幕在线观看一区二区| 欧美国产1区2区| 久久久不卡网国产精品二区| 精品国产sm最大网站| 日韩欧美国产精品| 精品福利一二区| 久久精品无码一区二区三区| 久久久精品免费观看| 国产视频一区二区在线| 国产精品第四页| 成人欧美一区二区三区黑人麻豆| 中文字幕制服丝袜成人av | 国产日韩欧美一区| 在线亚洲激情| 国产精品最新自拍| 乱码第一页成人| 色婷婷综合久色| 欧美三级日韩在线| 日韩天堂在线观看| 久久品道一品道久久精品| 国产亚洲成年网址在线观看| 国产欧美日韩精品一区| 国产精品免费丝袜| 亚洲色图色小说| 亚洲一区二区三区四区五区黄 | 在线一区日本视频| 亚洲永久在线| 欧美在线播放高清精品| 欧美日韩国产影片| 日韩一区国产二区欧美三区| 精品精品国产高清a毛片牛牛 | 欧美福利视频导航| 精品国产1区2区3区| 国产视频一区二区三区在线观看|