日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

java實現(xiàn)excel導入 java批量導入excel數(shù)據(jù)( 三 )


/** * 自定義樣式 * @return */private static HorizontalCellStyleStrategy customerStyle(){// 頭的策略WriteCellStyle headWriteCellStyle = new WriteCellStyle();// 背景設置為紅色headWriteCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());WriteFont headWriteFont = new WriteFont();headWriteFont.setFontHeightInPoints((short)20);headWriteCellStyle.setWriteFont(headWriteFont);// 內(nèi)容的策略WriteCellStyle contentWriteCellStyle = new WriteCellStyle();// 這里需要指定 FillPatternType 為FillPatternType.SOLID_FOREGROUND 不然無法顯示背景顏色.頭默認了 FillPatternType所以可以不指定contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);// 背景綠色contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());WriteFont contentWriteFont = new WriteFont();// 字體大小contentWriteFont.setFontHeightInPoints((short)20);contentWriteCellStyle.setWriteFont(contentWriteFont);// 這個策略是 頭是頭的樣式 內(nèi)容是內(nèi)容的樣式 其他的策略可以自己實現(xiàn)HorizontalCellStyleStrategy horizontalCellStyleStrategy =new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);return horizontalCellStyleStrategy;}在寫入的時候,將其注入,例如下面的動態(tài)導出:
//通過registerWriteHandler方法,將自定義的樣式類注入進去EasyExcel.write(outputStream).registerWriteHandler(customerStyle()).head(headList).sheet("用戶信息").doWrite(dataList);2.3、導入 exceleasyexcel 的導入同樣也支持兩種方式,和上面一樣,一種是通過實體類注解方式來讀取文件,另一種是通過動態(tài)監(jiān)聽器讀取文件 。
2.3.1、實體類注解方式來讀取文件實體類注解方式來讀取文件時,要讀取的 excel 表頭需要與實體類一一對應,以下面的 excel 文件為例!

java實現(xiàn)excel導入 java批量導入excel數(shù)據(jù)


通過注解方式來讀取,既可以指定列的下表,也可以通過列名來映射,但是兩者只能取一個 。
【java實現(xiàn)excel導入 java批量導入excel數(shù)據(jù)】/** * 讀取實體類 */public class UserReadEntity {@ExcelProperty(value = "https://www.jinnalai.com/fenxiang/姓名")private String name;/*** 強制讀取第三個 這里不建議 index 和 name 同時用,要么一個對象只用index,要么一個對象只用name去匹配*/@ExcelProperty(index = 1)private int age;@DateTimeFormat("yyyy-MM-dd HH:mm:ss")@ExcelProperty(value = "https://www.jinnalai.com/fenxiang/操作時間")private Date time;//set、get...}public static void main(String[] args) throws FileNotFoundException { //同步讀取文件內(nèi)容FileInputStream inputStream = new FileInputStream(new File("/Users/panzhi/Documents/easyexcel-user1.xls"));List<UserReadEntity> list = EasyExcel.read(inputStream).head(UserReadEntity.class).sheet().doReadSync();System.out.println(JSONArray.toJSONString(list));}運行程序,輸出結(jié)果如下:
[{"age":20,"name":"張三0","time":1616920360000},{"age":21,"name":"張三1","time":1616920360000},{"age":22,"name":"張三2","time":1616920360000},{"age":23,"name":"張三3","time":1616920360000},{"age":24,"name":"張三4","time":1616920360000},{"age":25,"name":"張三5","time":1616920360000},{"age":26,"name":"張三6","time":1616920360000},{"age":27,"name":"張三7","time":1616920360000},{"age":28,"name":"張三8","time":1616920360000},{"age":29,"name":"張三9","time":1616920360000}]2.3.2、動態(tài)監(jiān)聽器讀取文件動態(tài)監(jiān)聽器讀取文件,與上面的方式有一個明顯的區(qū)別是,我們需要重新寫一個實現(xiàn)類,來監(jiān)聽 easyexcel 一行一行解析出來的數(shù)據(jù),然后將數(shù)據(jù)封裝出來,基于此,我們可以編寫一套動態(tài)的導入工具類,詳細工具類會下面介紹到,示例代碼如下:
/** * 創(chuàng)建一個監(jiān)聽器,繼承自AnalysisEventListener */public class UserDataListener extends AnalysisEventListener<Map<Integer, String>> {private static final Logger LOGGER = LoggerFactory.getLogger(UserDataListener.class);/*** 表頭數(shù)據(jù)*/private List<Map<Integer, String>> headList = new ArrayList<>();/*** 數(shù)據(jù)體*/private List<Map<Integer, String>> dataList = new ArrayList<>();/*** 這里會一行行的返回頭** @param headMap* @param context*/@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {LOGGER.info("解析到一條頭數(shù)據(jù):{}", JSON.toJSONString(headMap));headList.add(headMap);}/*** 這個每一條數(shù)據(jù)解析都會來調(diào)用** @param data*one row value. Is is same as {@link AnalysisContext#readRowHolder()}* @param context*/@Overridepublic void invoke(Map<Integer, String> data, AnalysisContext context) {LOGGER.info("解析到一條數(shù)據(jù):{}", JSON.toJSONString(data));dataList.add(data);}/*** 所有數(shù)據(jù)解析完成了 都會來調(diào)用** @param context*/@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {LOGGER.info("所有數(shù)據(jù)解析完成!");}public List<Map<Integer, String>> getHeadList() {return headList;}public List<Map<Integer, String>> getDataList() {return dataList;}}

推薦閱讀