当前位置: 首页 > news >正文

江西省建设网站php 开源企业网站

江西省建设网站,php 开源企业网站,北京融安特智能科技营销型网站,建设银行官方网站广州文章目录 导入(读取)(read)-示例及核心部件导入(读取)(read)-核心部件EasyExcel(EasyExcelFactory) # 入口read() # read()方法用于构建workbook(工作簿)对象#xff0c;new ExcelReaderBuilder()doReadAll()这里选XlsxSaxAnalyser这个实现类吧然后到这个类XlsxRowHandlernew ExcelReaderBuilder()doReadAll()这里选XlsxSaxAnalyser这个实现类吧然后到这个类XlsxRowHandler这里使用了策略模式会根据xml不同的标签拿到对应的处理类来进行处理。从上面代码找到RowTagHandler这个类每解析了一行数据后都会进行处理然后看endRow()方法进入到dealData方法中跟踪invoke()方法选用ModelBuildEventListener这个实现类吧进入到buildUserModel方法中 这块内容有点多单独拉出来要不看着太乱。 导入(读取)(read)-示例及核心部件 代码 EasyExcel.read(file.getInputStream(), UserExcelVo.class, userListener).extraRead(CellExtraTypeEnum.MERGE).sheet(0) // 指定读取哪个sheet.headRowNumber(1) // 指定标题行.doRead(); // 执行读取导入(读取)(read)-核心部件 以上面代码为例。 EasyExcel(EasyExcelFactory) # 入口 read() # read()方法用于构建workbook(工作簿)对象new ExcelReaderBuilder() public class EasyExcelFactory {public static ExcelReaderBuilder read() {return new ExcelReaderBuilder();} }public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilderExcelReaderBuilder, ReadWorkbook {/*** Workbook*/private final ReadWorkbook readWorkbook;public ExcelReaderBuilder() {this.readWorkbook new ReadWorkbook();} }doReadAll() public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilderExcelReaderBuilder, ReadWorkbook {public void doReadAll() {try (ExcelReader excelReader build()) {excelReader.readAll();}} }public class ExcelReader implements Closeable {public void readAll() {excelAnalyser.analysis(null, Boolean.TRUE);} }public class ExcelAnalyserImpl implements ExcelAnalyser { Overridepublic void analysis(ListReadSheet readSheetList, Boolean readAll) {try {if (!readAll CollectionUtils.isEmpty(readSheetList)) {throw new IllegalArgumentException(Specify at least one read sheet.);}analysisContext.readWorkbookHolder().setParameterSheetDataList(readSheetList);analysisContext.readWorkbookHolder().setReadAll(readAll);try {excelReadExecutor.execute();} catch (ExcelAnalysisStopException e) {if (LOGGER.isDebugEnabled()) {LOGGER.debug(Custom stop!);}}} catch (RuntimeException e) {finish();throw e;} catch (Throwable e) {finish();throw new ExcelAnalysisException(e);}} }这里选XlsxSaxAnalyser这个实现类吧 public class XlsxSaxAnalyser implements ExcelReadExecutor { Overridepublic void execute() {for (ReadSheet readSheet : sheetList) {readSheet SheetUtils.match(readSheet, xlsxReadContext);if (readSheet ! null) {xlsxReadContext.currentSheet(readSheet);parseXmlSource(sheetMap.get(readSheet.getSheetNo()), new XlsxRowHandler(xlsxReadContext));// Read commentsreadComments(readSheet);// The last sheet is readxlsxReadContext.analysisEventProcessor().endSheet(xlsxReadContext);}}} }然后到这个类XlsxRowHandler这里使用了策略模式会根据xml不同的标签拿到对应的处理类来进行处理。 public class XlsxRowHandler extends DefaultHandler { static {CellFormulaTagHandler cellFormulaTagHandler new CellFormulaTagHandler();XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_FORMULA_TAG, cellFormulaTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_FORMULA_TAG, cellFormulaTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_FORMULA_TAG, cellFormulaTagHandler);CellInlineStringValueTagHandler cellInlineStringValueTagHandler new CellInlineStringValueTagHandler();XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_INLINE_STRING_VALUE_TAG, cellInlineStringValueTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_INLINE_STRING_VALUE_TAG, cellInlineStringValueTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_INLINE_STRING_VALUE_TAG, cellInlineStringValueTagHandler);CellTagHandler cellTagHandler new CellTagHandler();XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_TAG, cellTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_TAG, cellTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_TAG, cellTagHandler);CellValueTagHandler cellValueTagHandler new CellValueTagHandler();XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.CELL_VALUE_TAG, cellValueTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_CELL_VALUE_TAG, cellValueTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_CELL_VALUE_TAG, cellValueTagHandler);CountTagHandler countTagHandler new CountTagHandler();XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.DIMENSION_TAG, countTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_DIMENSION_TAG, countTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_DIMENSION_TAG, countTagHandler);HyperlinkTagHandler hyperlinkTagHandler new HyperlinkTagHandler();XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.HYPERLINK_TAG, hyperlinkTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_HYPERLINK_TAG, hyperlinkTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_HYPERLINK_TAG, hyperlinkTagHandler);MergeCellTagHandler mergeCellTagHandler new MergeCellTagHandler();XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.MERGE_CELL_TAG, mergeCellTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_MERGE_CELL_TAG, mergeCellTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_MERGE_CELL_TAG, mergeCellTagHandler);RowTagHandler rowTagHandler new RowTagHandler();XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.ROW_TAG, rowTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_ROW_TAG, rowTagHandler);XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.NS2_ROW_TAG, rowTagHandler);} }从上面代码找到RowTagHandler这个类每解析了一行数据后都会进行处理 public class RowTagHandler extends AbstractXlsxTagHandler { Overridepublic void endElement(XlsxReadContext xlsxReadContext, String name) {XlsxReadSheetHolder xlsxReadSheetHolder xlsxReadContext.xlsxReadSheetHolder();RowTypeEnum rowType MapUtils.isEmpty(xlsxReadSheetHolder.getCellMap()) ? RowTypeEnum.EMPTY : RowTypeEnum.DATA;// Its possible that all of the cells in the row are emptyif (rowType RowTypeEnum.DATA) {boolean hasData false;for (Cell cell : xlsxReadSheetHolder.getCellMap().values()) {if (!(cell instanceof ReadCellData)) {hasData true;break;}ReadCellData? readCellData (ReadCellData?)cell;if (readCellData.getType() ! CellDataTypeEnum.EMPTY) {hasData true;break;}}if (!hasData) {rowType RowTypeEnum.EMPTY;}}xlsxReadContext.readRowHolder(new ReadRowHolder(xlsxReadSheetHolder.getRowIndex(), rowType,xlsxReadSheetHolder.getGlobalConfiguration(), xlsxReadSheetHolder.getCellMap()));xlsxReadContext.analysisEventProcessor().endRow(xlsxReadContext);xlsxReadSheetHolder.setColumnIndex(null);xlsxReadSheetHolder.setCellMap(new LinkedHashMap());} }然后看endRow()方法 public class DefaultAnalysisEventProcessor implements AnalysisEventProcessor {Overridepublic void endRow(AnalysisContext analysisContext) {if (RowTypeEnum.EMPTY.equals(analysisContext.readRowHolder().getRowType())) {if (LOGGER.isDebugEnabled()) {LOGGER.debug(Empty row!);}if (analysisContext.readWorkbookHolder().getIgnoreEmptyRow()) {return;}}dealData(analysisContext);} }进入到dealData方法中 private void dealData(AnalysisContext analysisContext) {ReadRowHolder readRowHolder analysisContext.readRowHolder();MapInteger, ReadCellData? cellDataMap (Map)readRowHolder.getCellMap();readRowHolder.setCurrentRowAnalysisResult(cellDataMap);int rowIndex readRowHolder.getRowIndex();int currentHeadRowNumber analysisContext.readSheetHolder().getHeadRowNumber();boolean isData rowIndex currentHeadRowNumber;// Last head columnif (!isData currentHeadRowNumber rowIndex 1) {buildHead(analysisContext, cellDataMap);}// Now is datafor (ReadListener readListener : analysisContext.currentReadHolder().readListenerList()) {try {if (isData) {readListener.invoke(readRowHolder.getCurrentRowAnalysisResult(), analysisContext);} else {readListener.invokeHead(cellDataMap, analysisContext);}} catch (Exception e) {onException(analysisContext, e);break;}if (!readListener.hasNext(analysisContext)) {throw new ExcelAnalysisStopException();}}}这里可以看到每解析了一行数据后都会逐个调用监听器的invoke方法包括easyexcel默认的监听器和我们自定义的监听器 跟踪invoke()方法选用ModelBuildEventListener这个实现类吧 进入到ModelBuildEventListener实现类这个实现类是easyexcel自带的默认的监听器这个监听器的主要作用是将excel的每行数据封装 public class ModelBuildEventListener implements IgnoreExceptionReadListenerMapInteger, ReadCellData? {Overridepublic void invoke(MapInteger, ReadCellData? cellDataMap, AnalysisContext context) {ReadSheetHolder readSheetHolder context.readSheetHolder();if (HeadKindEnum.CLASS.equals(readSheetHolder.excelReadHeadProperty().getHeadKind())) {context.readRowHolder().setCurrentRowAnalysisResult(buildUserModel(cellDataMap, readSheetHolder, context));return;}context.readRowHolder().setCurrentRowAnalysisResult(buildNoModel(cellDataMap, readSheetHolder, context));} }进入到buildUserModel方法中 private Object buildUserModel(MapInteger, ReadCellData? cellDataMap, ReadSheetHolder readSheetHolder,AnalysisContext context) {ExcelReadHeadProperty excelReadHeadProperty readSheetHolder.excelReadHeadProperty();Object resultModel;try {resultModel excelReadHeadProperty.getHeadClazz().newInstance();} catch (Exception e) {throw new ExcelDataConvertException(context.readRowHolder().getRowIndex(), 0,new ReadCellData(CellDataTypeEnum.EMPTY), null,Can not instance class: excelReadHeadProperty.getHeadClazz().getName(), e);}MapInteger, Head headMap excelReadHeadProperty.getHeadMap();BeanMap dataMap BeanMapUtils.create(resultModel);for (Map.EntryInteger, Head entry : headMap.entrySet()) {Integer index entry.getKey();Head head entry.getValue();String fieldName head.getFieldName();if (!cellDataMap.containsKey(index)) {continue;}ReadCellData? cellData cellDataMap.get(index);Object value ConverterUtils.convertToJavaObject(cellData, head.getField(),ClassUtils.declaredExcelContentProperty(dataMap, readSheetHolder.excelReadHeadProperty().getHeadClazz(),fieldName, readSheetHolder), readSheetHolder.converterMap(), context,context.readRowHolder().getRowIndex(), index);if (value ! null) {dataMap.put(fieldName, value);}}return resultModel;}可以看到先是通过反射创建对象然后根据反射对各个对象赋值。 至此excel的一行数据就被easyexcel默认的监听器解析成了对应的java对象然后我们在自定义的监听器中就能拿到这个对象并进行处理了。
http://www.w-s-a.com/news/436743/

相关文章:

  • py网站开发wordpress 公司网站 模板 下载
  • 长春城乡建设部网站首页英文网站推广服务
  • wordpress实训上海整站seo
  • 福建自己建设网站义乌市企推网络科技有限公司
  • 宁波优化网站哪家好织梦网站地图怎么做
  • 怎么在自己的网站加关键词烟台企业网站建设
  • 中山网站建设界面设计职业技能等级证书
  • 做网站首页多少钱免费版企业邮箱注册
  • ppp模式在网站建设的南昌专业做网站公司哪家好
  • 泰安网站建设制作电话号码百度sem竞价托管公司
  • 苏网站建设网页设计和网页美工
  • 跨境电商平台网站广州地铁站路线图
  • 吉林省交通建设集团有限公司网站企业网站推广的策略有哪些
  • 网站内链怎么做更好郑州网站建设哪家便宜
  • 建设大型购物网站运城哪里做网站
  • php企业网站通讯录管理系统做网站在线支付系统多少钱?
  • 怎么区分用vs和dw做的网站贝贝网网站开发背景
  • 无锡网站建设制作建设信息网查询
  • 彩票系统网站开发建设人力资源网官网
  • 有专门下载地图做方案的网站吗网站建设平台计划书
  • 网站闭站保护10个著名摄影网站
  • 安徽省建设工程信息网官网首页网站关键词排名优化工具
  • 深圳网站建设 百业网站专题教程
  • 公司seo是指什么意思如何来做网站优化
  • 化妆品网站建设平台的分析湖南网站搜索排名优化电话
  • 织梦网站修改教程视频教程管理类网站开发价格
  • 如何让新网站快速收录企业建站的作用是什么
  • 在线制作简历的网站做的最好的微电影网站
  • h5制作的网站网络游戏投诉平台
  • 做外贸网站好还是内贸网站好珠海新盈科技有限公 网站建设