亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java使用Apache poi 導(dǎo)入Excel文件

2019-11-11 07:46:15
字體:
供稿:網(wǎng)友

java使用Apache poi 操作Excel-基本概念與使用中介紹了poi與excel相關(guān)的基本概念,接下來通過poi來導(dǎo)入excel。

本文將使用如下版本的 POI來完成導(dǎo)入數(shù)據(jù)的演示。

<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency>

1 讀取Excel并打印結(jié)果

由上篇文章可知Excel的基本結(jié)構(gòu),因此導(dǎo)入Excel就是要將Excel某個電子表單中的所有行讀入到程序中。

public static <T> List<T> importExcel(File excelFile) throws InvalidFormatException, IOException, InstantiationException, IllegalaccessException { XSSFWorkbook workBook = new XSSFWorkbook(excelFile); XSSFSheet sheet = workBook.getSheetAt(0); for(int ri = sheet.getFirstRowNum() + 1 ; ri <= sheet.getLastRowNum(); ri++) { Row row = sheet.getRow(ri); for(int ci = row.getFirstCellNum(); ci < row.getLastCellNum(); ci++) { Cell cell = row.getCell(ci); Object value = getCellValue(cell,fields[ci]); System.out.如上代碼是將excelFile讀入,然后讀取workBook.getSheetAt(0);表單,接著遍歷各個行,并獲取各個行的數(shù)據(jù)并輸出。

由于Excel單元格的數(shù)據(jù)由不同的類型組成,因此獲取數(shù)據(jù)時要判斷單元格類型,并調(diào)對應(yīng)的方法獲取數(shù)據(jù)。

2 將讀取的數(shù)據(jù)存入Java對象中

接下來將1中讀取的數(shù)據(jù)保存在Java對象中。這里以Person對象為例。Person對象省略了Getter,Setter,及toString方法。

public class Person { private String name; private String sex; private Integer age; private Double height; }

使用的Excel數(shù)據(jù)如下所示。首行是標(biāo)題列,首行之后是數(shù)據(jù)列。

姓名 性別 年齡 身高(M)洛克 男 18 1.83 羅琳 女 18 1.76

為了將Excel中讀取的數(shù)據(jù)存儲在Java對象中,將1中的方法簽名修改為,其中type是最終的類型,本文中為Person。

public static <T> List<T> importExcel(File excelFile,Class<T> type)

修改后的importExcel方法如下。

public static <T> List<T> importExcel(File excelFile,Class<T> type) throws InvalidFormatException, IOException, InstantiationException, IllegalAccessException { XSSFWorkbook workBook = new XSSFWorkbook(excelFile); List<T> result = new ArrayList<T>(); XSSFSheet sheet = workBook.getSheetAt(0); for(int ri = sheet.getFirstRowNum() + 1 ; ri <= sheet.getLastRowNum(); ri++) { Row row = sheet.getRow(ri); T object = type.newInstance(); Field[] fields = object.getClass().getDeclaredFields(); Field.setAccessible(fields, true); for(int ci = row.getFirstCellNum(); ci < row.getLastCellNum(); ci++) { Cell cell = row.getCell(ci); Object value = getCellValue(cell,fields[ci]); fields[ci].set(object, value); } result.add(object); Field.setAccessible(fields, false); } return result; }

上述代碼忽略Excel標(biāo)題行,因此是從首行+1行開始進行遍歷。

代碼中首先根據(jù)type來創(chuàng)建一個實例。 T object = type.newInstance(); 注意事項:這里需要注意的是對象的各個成員的類型要與Excel各列所保持一致,這樣免去尋找對象成員與Excel列單元的對應(yīng)關(guān)系的麻煩,并簡化示例。

創(chuàng)建完實例后,獲取對象中的各個字段,并修改訪問權(quán)限,以便隨后賦值。

Field[] fields = object.getClass().getDeclaredFields();Field.setAccessible(fields, true);

接著遍歷各個列,由于對象中字段的順序與Excel列順序保持一致,因此使用同樣的列索引即可獲取Excel列單元與對象成員。

Person成員的類型由String,int,double,而在Excel中單元格數(shù)值的類型統(tǒng)一被描述為Cell.CELL_TYPE_NUMERIC類型,因此在導(dǎo)入并轉(zhuǎn)換為Java對象就需要格外注意類型處理,以避免出錯。以本文中Excel中年齡為例,獲取后單元格數(shù)值使用的是cell.getNumericCellValue()方法,該方法返回類型為Double,而Java對象中使用的是Integer。此外使用中也可能將年齡寫成字符串。因此需要對每種數(shù)據(jù)類型判斷并合理轉(zhuǎn)換,或給出相應(yīng)錯誤提示。

通過定義接口TypeHandler 來處理各種類型轉(zhuǎn)換的問題。

public interface TypeHandler { public Object handle(Cell cell,Field field);}

以Integer類型為例,接著定義Integer處理器。

public class IntegerHandler implements TypeHandler{ @Override public Object handle(Cell cell, Field field) { int type = cell.getCellType(); if(type == Cell.CELL_TYPE_NUMERIC) { return (int)cell.getNumericCellValue(); } else if(type == Cell.CELL_TYPE_STRING) { try { return Integer.valueOf(cell.getStringCellValue()); }catch(NumberFormatException e) { return null; } } else { return null; } }}

當(dāng)單元格類型返回double(Cell.CELL_TYPE_NUMERIC),則執(zhí)行類型轉(zhuǎn)換。如果是字符串類型,則嘗試轉(zhuǎn)換為整型。如果無法轉(zhuǎn)換則返回null。對于無法轉(zhuǎn)換的類型直接返回null。

其它類型如String,Double以處理方法與此一致。

最后修改getCellValue,代碼如下。

private final static Map<Class<?>,TypeHandler> typeHandlerMap = new HashMap<>(); static { typeHandlerMap.put(Integer.class, new IntegerHandler()); typeHandlerMap.put(Double.class, new DoubleHandler()); typeHandlerMap.put(String.class, new StringHandler()); } private static Object getCellValue(Cell cell,Field field) { TypeHandler handler = typeHandlerMap.get(field.getType()); if(handler == null) { return null; } return handler.handle(cell, field); }

3 使用注解添加輔助功能

1,2中講述了基本的導(dǎo)入功能實現(xiàn)。而對字段排序,驗證等還可以結(jié)合自定義注解來完成,也就是在獲取對象Field時,拿到注解并獲取相關(guān)參數(shù),最后完成校驗排序等功能。

4 完整代碼

private final static Map<Class<?>,TypeHandler> typeHandlerMap = new HashMap<>(); static { typeHandlerMap.put(Integer.class, new IntegerHandler()); typeHandlerMap.put(Double.class, new DoubleHandler()); typeHandlerMap.put(String.class, new StringHandler()); } public static <T> List<T> importExcel(File excelFile,Class<T> type) throws InvalidFormatException, IOException, InstantiationException, IllegalAccessException { XSSFWorkbook workBook = new XSSFWorkbook(excelFile); List<T> result = new ArrayList<T>(); XSSFSheet sheet = workBook.getSheetAt(0); for(int ri = sheet.getFirstRowNum() + 1 ; ri <= sheet.getLastRowNum(); ri++) { Row row = sheet.getRow(ri); T object = type.newInstance(); Field[] fields = object.getClass().getDeclaredFields(); Field.setAccessible(fields, true); for(int ci = row.getFirstCellNum(); ci < row.getLastCellNum(); ci++) { Cell cell = row.getCell(ci); Object value = getCellValue(cell,fields[ci]); fields[ci].set(object, value); } result.add(object); Field.setAccessible(fields, false); } return result; } private static Object getCellValue(Cell cell,Field field) { TypeHandler handler = typeHandlerMap.get(field.getType()); if(handler == null) { return null; } return handler.handle(cell, field); }public interface TypeHandler { public Object handle(Cell cell,Field field);}public class IntegerHandler implements TypeHandler{ @Override public Object handle(Cell cell, Field field) { int type = cell.getCellType(); if(type == Cell.CELL_TYPE_NUMERIC) { return (int)cell.getNumericCellValue(); } else if(type == Cell.CELL_TYPE_STRING) { try { return Integer.valueOf(cell.getStringCellValue()); }catch(NumberFormatException e) { return null; } } else { return null; } }}public class DoubleHandler implements TypeHandler{ @Override public Object handle(Cell cell, Field field) { int type = cell.getCellType(); if(type == Cell.CELL_TYPE_NUMERIC) { return cell.getNumericCellValue(); } else if(type == Cell.CELL_TYPE_STRING) { try { return Double.valueOf(cell.getNumericCellValue()); }catch(NumberFormatException e) { return null; } } else { return null; } }}public class StringHandler implements TypeHandler{ @Override public Object handle(Cell cell, Field field) { int type = cell.getCellType(); if(type != Cell.CELL_TYPE_STRING) { return ""; } else { return cell.getStringCellValue(); } }}

使用時要根據(jù)實際情況調(diào)整或新增handler即可。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
成人av综合一区| 国产三级三级看三级| 亚洲人亚洲人成电影网站色| 领导边摸边吃奶边做爽在线观看| 久久一区二区三区av| 国产精彩精品视频| 欧美一级二级视频| 成年人黄国产| 免费精品99久久国产综合精品应用| 日韩一区在线视频| 精品国产乱码久久久久久1区2区| 欧美日韩激情在线一区二区三区| 亚洲一二三四在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 手机毛片在线观看| 国产精品久久久久久久久免费| 久久久久久久久久av| 在线精品国产亚洲| 欧美成人高清在线| 欧美疯狂xxxx大交乱88av| 色999日韩国产欧美一区二区| 国产精品久久久久久精| 韩国三级大全久久网站| 久久久久久伊人| 亚洲性色视频| 日韩美女视频免费在线观看| 国产伦精品一区二区三区视频黑人| 国模无码一区二区三区| 直接在线观看的三级网址| 国产一级黄色大片| 欧美性猛交xxx乱久交| 天天干夜夜艹| 51成人精品网站| 豆花视频一区| 欧美一级淫片| 在线看国产一区二区| 天天躁日日躁狠狠躁欧美巨大小说| 国产欧美一区二区三区久久| av不卡免费在线观看| 欧美一级裸体视频| 成人18视频| 国产福利影院在线观看| 国产国语**毛片高清视频| 奇米777影视成人四色| 免费毛片一区二区三区久久久| 欧美13videosex性极品| 三级电影在线看| 中文字幕av影视| 亚洲精品午夜视频| 国产真人真事毛片视频| 免费在线观看av网址| 国产精品国产馆在线真实露脸| 国产精品日日摸夜夜爽| 亚洲一二av| 老司机午夜免费福利| 岛国av一区二区在线在线观看| 国产精品视频一二三区| 日韩欧美成人免费视频| 国产精品理论片| 国产精品啪啪啪视频| 亚洲伊人观看| 爱情岛论坛亚洲自拍| 日韩你懂的在线播放| 日本不卡视频| 日韩中文理论片| 欧美成人a交片免费看| 亚洲永久免费av| 人人干人人爱人人爱| 91官网在线| 高清日韩中文字幕| 国产精品原创视频| 自拍偷拍亚洲欧美| 亚洲三级电影网站| 无码 人妻 在线 视频| 亚洲自拍另类综合| 亚洲国产一区二区三区网站| 久久不射热爱视频精品| 91久久影院| 97在线资源在| 国产精品爱久久久久久久小说| 国产丝袜美腿一区二区三区| 欧美天堂在线视频| 亚洲天堂av在线免费观看| 91麻豆.com| 成人91视频| 国产精品视频h| 亚洲一区二区三区观看| 日韩综合在线| 五月天av在线播放| gogo亚洲国模私拍人体| 国产亚洲自拍av| 欧美xxxxxx| 91蜜桃传媒精品久久久一区二区| 深夜福利在线观看直播| 久久久综合网| 先锋影音av中文资源| 日韩在线视频免费观看高清中文| 欧美日本国产精品| 欧美成人免费全部| 成人欧美视频在线| 久久久综合网| 999精品视频在线观看播放| 国产传媒在线看| 亚洲国产一区二区三区| 在线电影欧美成精品| 亚洲高清视频一区二区| 8x拔播拔播x8国产精品| 日日日日人人人夜夜夜2017| 精品香蕉在线观看视频一| 欧美性xxxx极品hd欧美| 精品国产无码在线| 亚洲欧美小说色综合小说一区| 成人午夜在线视频一区| 国产91精品高潮白浆喷水| 亚洲精品tv久久久久久久久久| 亚洲a视频在线| 国产人妖乱国产精品人妖| 国产精品视频久久久久久久| 久久久这里只有精品视频| 欧美成人三级在线视频| www.成人精品| 亚洲成人影院在线观看| 老妇喷水一区二区三区| 香蕉视频黄色片| 性の欲びの女javhd| 亚洲精品性视频| 国产区成人精品视频| 国产精品s色| 日本成人在线电影网| 国产精品国内免费一区二区三区| 国产精品女主播视频| 久久久久久亚洲精品| 永久av免费在线观看| 粉嫩欧美一区二区三区高清影视| 亚洲一级在线| 中文精品无码中文字幕无码专区| 男人av在线| 91免费看`日韩一区二区| 乱一区二区av| 国产精品露脸自拍| xxxxx日韩| 岛国视频免费在线观看| 精品香蕉在线观看视频一| 中文字幕第100页| 99久久国产综合精品成人影院| 国产精品三级a三级三级午夜| 在线观看av网页| 亚洲欧美日韩一级| 一区二区视频免费| 国产成人精品网址| 午夜视频在线免费看| 欧美人与动牲交xxxxbbbb| 国产精品一区2区| 国产精品视频在线播放| 欧美日韩 一区二区三区| 姑娘第5集在线观看免费好剧| 人人爽人人av| 又黄又爽又色的视频| 国产高清av在线播放| 日韩中文字幕无砖| 涩涩视频网站| 亚洲欧美国产不卡| 91美女福利视频| 国产一级免费观看| 欧美中文字幕久久| 四虎成人精品在永久免费| 国产无套精品一区二区| 国产日产亚洲精品| 性一交一乱一色一视频麻豆| 一区二区三区精品99久久| 激情视频在线播放| 国产亚洲黄色片| 国产免费久久久久| 国产无遮挡一区二区三区毛片日本| 91麻豆国产自产在线观看亚洲| 国产91沈先生在线播放| 欧美va亚洲va国产综合| 亚洲美女性生活视频| 黄色网络在线观看| 免费a在线看| 玖玖国产精品视频| 欧美日韩午夜精品| 欧美亚日韩国产aⅴ精品中极品| 亚洲国产一区二区在线观看| 日韩在线观看一区二区| 日韩电影在线免费| 欧美一区2区| 日韩超碰人人爽人人做人人添| 一级黄色片毛片| 国产一级二级三级在线观看| 久久网站免费观看| 激情综合视频| 色狼人综合干| 亚洲第一天堂久久| 久久r热视频| 熟妇人妻久久中文字幕| 成人影院在线观看| 久久人人97超碰精品888| 亚洲熟妇无码一区二区三区导航| 中日韩视频在线观看| 视频在线观看免费影院欧美meiju| 欧美专区在线视频| 亚洲桃色在线一区| www.黄色在线| 国产成人精品电影| 探花视频在线观看| 免费在线播放电影| 久久久精品一区二区毛片免费看| 新67194成人永久网站| 鬼打鬼之黄金道士1992林正英| 人禽交欧美网站免费| 久草在线视频资源| 欧美aa国产视频| 久久婷婷综合中文字幕| 国产精品揄拍500视频| 亚洲欧美另类在线视频| 蜜桃网站成人| 成人片黄网站色大片免费毛片| 无遮挡又爽又刺激的视频| www.污视频| 国产香蕉精品| 国产经典一区二区| 天堂俺去俺来也www久久婷婷| 女人被狂躁c到高潮| 免费黄网站在线| 自拍偷拍亚洲综合| 成人激情免费电影网址| 欧美一卡二卡在线| 日韩久久电影| 日韩美女免费观看| 农村妇女精品一区二区| 久久精品一区二| 欧美日韩大尺度| 亚洲成av人片观看| 成人影院久久久久久影院| 91在线免费看片| 亚洲精品乱码视频| 肉肉视频在线观看| 91精品久久久久久| 欧美一级黄色网| 野外性xxxxfreexxxxx欧美| 国产精品一区二区av影院萌芽| 国产高清久久久久| 9i看片成人免费看片| hs视频在线观看| 在线观看视频在线观看| 婷婷激情四射五月天| 国产日韩精品综合网站| 日韩精品一区二区三区三区免费| 黑粗硬长欧美在线视频免费的| 最爽无遮挡行房视频在线| 久久精品亚洲成在人线av网址| 动漫3d精品一区二区三区乱码| 91影院未满十八岁禁止入内| 香蕉视频免费看| 青青在线免费观看视频| 国产精品久久久久久久久久ktv| 成人久久18免费网站麻豆| 国产91精品久久久久| 国产男女猛烈无遮挡91| 美女精品在线观看| 国产精品久久久久久69| 6080日韩午夜伦伦午夜伦| 精品国产99国产精品| 波多野结衣在线观看一区| 在线日韩日本国产亚洲| 欧美大片免费观看网址| 日本免费一区二区三区四区| 欧美日韩高清区| 国产裸体写真av一区二区| 污免费在线观看| 大片网站久久| 中文字幕在线欧美| 超碰97在线播放| 欧美另类极品videosbest视| 欧美日韩国产在线播放网站| 中文字幕在线2021| 精品国产福利在线| 17c丨国产丨精品视频| 一级片手机在线观看| 真人抽搐一进一出视频| 女明星视频黄又免费| 亚洲专区第一页| 色天天色综合| 亚洲国产三级在线| 午夜久久久久久久久久久| 性色av一区二区三区在线观看| 久久精品www人人爽人人| 欧美激情性爽国产精品17p| 亚洲欧洲日本一区二区三区| 成人在线免费公开观看视频| 欧美一卡二卡在线观看| 日本午夜在线亚洲.国产| 亚洲欧美日韩国产精品| 国产伦精品一区二区三区免| 最新国产拍偷乱拍精品| 日本午夜精华| 久久精品magnetxturnbtih| 午夜视频99| 久久久久久久久久影院| 久久久久久久久久福利| 久久久久久久波多野高潮日日| 久久偷看各类女兵18女厕嘘嘘| 亚洲精选91| 影院免费视频| 免费在线观看一区二区| 91久久久一线二线三线品牌| 2021av在线| 一级黄色片毛片| 好男人香蕉影院| 第四色日韩影片| 在线亚洲成人| 日本久久久久久久久| 成人资源视频网站免费| 成人毛片免费看| xvideos国产精品| 91蝌蚪国产九色| 91老司机精品视频| 在线天堂日本| 国产香蕉一区二区三区在线视频| 久久精品这里都是精品| 亚色视频在线播放| 亚洲一区三区在线观看| 成人a视频在线观看| 免费看日本毛片| 欧美综合在线视频| 日韩精品福利在线| 亚洲精品91美女久久久久久久|