<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Spring Boot 導出EXCEL模板以及導入EXCEL數據(阿里Easy Excel實戰)

      Spring Boot 導出EXCEL模板以及導入EXCEL數據(阿里Easy Excel實戰)

      1. 導入pom依賴

        image (1)
      2. 編寫導出模板

        @ApiOperation("導出xxx模板")
        @GetMapping("/downTemplates")
        public void download(HttpServletResponse response)  throws FileNotFoundException, IOException {
            response.reset();
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            File temFile=new File("src/main/resources/templates/xxx導入模版.xlsx");
            String fileName = URLEncoder.encode("xxx導入模版", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8' '" + fileName +".xlsx");
            FileCopyUtils.copy(new FileInputStream(temFile), response.getOutputStream());
            response.getOutputStream().close();
        
        }
        
      3. 導入數據處理

        1. 編寫監聽器

          @Component
          public class xxxListener extends AnalysisEventListener<Entity> {
          
              private static final Logger LOGGER = LoggerFactory.getLogger(xxxListener.class);
              //讀取數據初始化值
              private static final int BATCH_COUNT = 50;
              List<Entity> list = new ArrayList<Entity>();
              @Resource
              private   xxxxService  xxxxService;
          
              public xxxxListener() {
                  xxxxService=new xxxxServiceImpl();
              }
          
              public xxxxListener(xxxxService xxxxService) {
                  this.xxxxService=xxxxService;
              }
          
              @Override
              public void invoke(xxxx data, AnalysisContext analysisContext) {
                  list.add(data);
                  // 達到BATCH_COUNT了,需要去存儲一次數據庫,防止數據幾萬條數據在內存,容易OOM
                  if (list.size() >= BATCH_COUNT) {
                      saveData();
                      // 存儲完成清理 list
                      list.clear();
                  }
              }
          
              /**
               * 所有excel表中數據解析完成了 都會來調用這個
               * 解釋為什么要保存數據?
               *初始化讀取數量為50,表中信息已經加載完畢,,假設excel表中最后只剩下30行遺留數據,所以為了防止存在遺留數據 盡量判斷下集合是否為空,不為空在進行存儲(這是我的邏輯需要判斷,如果不需要也可進行不判斷)
               * @param analysisContext
               */
              @Override
              public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                  if(list.size()==0){
                      return;
                  }
                  saveData();
                  LOGGER.info("所有數據解析完成!");
              }
          
              private void saveData() {
                  //代碼實現類層保存數據
                  xxxxService.saveBatch(list);
                  LOGGER.info("存儲數據庫成功!");
              }
          
          
        2. 編寫數據轉換器

          public class XXXConverter implements Converter<Integer> {
              //在java中保護單位是用數字來標識的所以是int
              @Override
              public Class supportJavaTypeKey() {
                  return Integer.class;
              }
          
              // 在excel中是string
              @Override
              public CellDataTypeEnum supportExcelTypeKey() {
                  return CellDataTypeEnum.STRING;
              }
          
              //將excel的數據類型轉為java數據類型
          
              @Override
              public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
                  String stringValue = cellData.getStringValue();
                  if (stringValue == null) {
                      throw new RuntimeException("數據為空");
                  }
                  
                  if ("(自己的數據)".equals(stringValue)) {
                      return 1;
                  }
                
                  return 0;
              }
          
          
              //將java的數據類型轉為excel數據類型
              @Override
              public WriteCellData<?> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
                  return new WriteCellData<>();
              }
          }
          
          
      posted @ 2022-11-15 17:34  編程隨行  閱讀(404)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 免费人成在线观看网站| 海门市| 国产日韩精品欧美一区灰| 亚成区成线在人线免费99| 青青青青国产免费线在线观看| 亚洲成人资源在线观看| 激情内射亚洲一区二区三区| 国产国产午夜福利视频| 亚洲免费观看视频| 国产真人无码作爱免费视频app| 在线精品国产中文字幕| 未满十八18禁止免费无码网站| 久久亚洲精精品中文字幕| 精品国产免费一区二区三区香蕉| 国产乱人伦av在线无码| 国产女人叫床高潮大片| 精品超清无码视频在线观看| 国产人与禽zoz0性伦多活几年| 九九热在线观看精品视频| 国产日韩一区二区在线| 图木舒克市| WWW丫丫国产成人精品| 国产一区二区视频在线看| 久久这里只有精品好国产| 国产福利一区二区三区在线观看| 日韩大片高清播放器| 老色鬼永久精品网站| 一本色道国产在线观看二区| 久久99九九精品久久久久蜜桃| 乌克兰丰满女人a级毛片右手影院| 免费人成视频x8x8国产| 亚洲熟女乱综合一区二区三区| 久久99国产精品尤物| 黄色特级片一区二区三区| 亚洲精品一区二区三区大桥未久| 精品视频国产狼友视频| 亚洲VA成无码人在线观看天堂| 四虎永久精品免费视频| 国产天美传媒性色av高清| 国产自产av一区二区三区性色| 色综合国产一区二区三区|