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

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

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

      SpringBoot-EasyExcel導出數據(帶圖片)

      前言

      EasyExcel 是阿里巴巴開源的一個Java操作Excel的技術,和EasyPoi一樣是封裝Poi的工具類。

      但是不同的地方在于,在EasyExcel中解決了Poi技術讀取大批量數據耗費內存的問題。

      當然了,也封裝了很多常用的Excel操作

      • 最基本的導入導出
      • 圖片的導入導出
      • 大批量數據的導入導出
      • 模板的導出
      • 官方地址:https://alibaba-easyexcel.github.io/quickstart/write.html

      一、引入的maven依賴

       <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>easyexcel</artifactId>
          <version>3.1.1</version>
      </dependency>
      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <optional>true</optional>
      </dependency>

      二、導出的實體類

      EasyExcel也是注解式開發,常用注解如下

      • ExcelProperty 指定當前字段對應excel中的那一列
      • ExcelIgnore 默認所有字段都會和excel去匹配,加了這個注解會忽略該字段
      • DateTimeFormat 日期轉換,用String去接收excel日期格式的數據會調用這個注解。里面的value參照java.text.SimpleDateFormat
      • NumberFormat 數字轉換,用String去接收excel數字格式的數據會調用這個注解。里面的value參照java.text.DecimalFormat
      import com.alibaba.excel.annotation.ExcelIgnore;
      import com.alibaba.excel.annotation.ExcelProperty;
      import com.alibaba.excel.annotation.write.style.ContentRowHeight;
      import com.songwp.config.SxjgUrlImageConverter;
      import lombok.AllArgsConstructor;
      import lombok.Data;
      import lombok.EqualsAndHashCode;
      import lombok.NoArgsConstructor;
      import lombok.experimental.Accessors;
      import java.io.Serializable;
      import java.net.URL;
      
      /**
       * @Description 老師信息實體類
       * @Author songwp
       * @Date 2023/3/30 13:57
       **/
      @Data
      @EqualsAndHashCode(callSuper = false)
      @Accessors(chain = true)
      @ContentRowHeight(120)
      @AllArgsConstructor
      @NoArgsConstructor
      public class Teacher implements Serializable {
      
          /**
           * 教師編號
           */
          @ExcelProperty("教師編號")
          @ExcelIgnore
          private Integer teacherId;
          /**
           * 教師名稱
           */
          @ExcelProperty("教師名稱")
          private String teacherName;
          /**
           * 教師圖片
           */
          @ExcelProperty(value = {"教師圖片"},converter = SxjgUrlImageConverter.class)
          private URL teacherImage;
          /**
           * 教師狀態: 0 -任教中 1 - 為任教
           */
          @ExcelProperty("教師狀態")
          @ExcelIgnore
          private Integer teacherStatus;
      
          /**
           * 教師狀態: 0 -任教中 1 - 為任教
           */
          @ExcelProperty("教師狀態")
          private String teacherStatusStr;
          /**
           * 住址信息
           */
          @ExcelProperty("住址信息")
          private String address;

      三、圖片轉換處理類

      import com.alibaba.excel.converters.Converter;
      import com.alibaba.excel.metadata.GlobalConfiguration;
      import com.alibaba.excel.metadata.data.WriteCellData;
      import com.alibaba.excel.metadata.property.ExcelContentProperty;
      import com.alibaba.excel.util.IoUtils;
      import lombok.extern.slf4j.Slf4j;
      import org.springframework.util.ObjectUtils;
      import java.io.IOException;
      import java.io.InputStream;
      import java.net.URL;
      import java.net.URLConnection;
      
      /**
       * @Description 圖片處理
       * @Author songwp
       * @Date 2023/3/30 15:04
       **/
      @Slf4j
      public class SxjgUrlImageConverter implements Converter<URL> {
          public static int urlConnectTimeout = 2000;
          public static int urlReadTimeout = 6000;
      
          @Override
          public Class<?> supportJavaTypeKey() {
              return URL.class;
          }
      
          @Override
          public WriteCellData<?> convertToExcelData(URL value, ExcelContentProperty contentProperty,
                                                     GlobalConfiguration globalConfiguration) throws IOException {
              InputStream inputStream = null;
              try {
                  if (ObjectUtils.isEmpty(value)){
                      return new WriteCellData<>("圖片鏈接為空");
                  }
                  URLConnection urlConnection = value.openConnection();
                  urlConnection.setConnectTimeout(urlConnectTimeout);
                  urlConnection.setReadTimeout(urlReadTimeout);
                  inputStream = urlConnection.getInputStream();
                  byte[] bytes = IoUtils.toByteArray(inputStream);
                  return new WriteCellData<>(bytes);
              }catch (Exception e){
                  log.info("圖片獲取異常",e);
                  return new WriteCellData<>("圖片獲取異常");
              } finally {
                  if (inputStream != null) {
                      inputStream.close();
                  }
              }
          }
      }

      四、導出的工具類

      import com.alibaba.excel.EasyExcel;
      import com.sxjgkg.sjsk.innovation.InnovationConstants;
      import com.sxjgkg.sjsk.zhaixing.core.ZhaixingException;
      import lombok.extern.slf4j.Slf4j;
      import javax.servlet.http.HttpServletResponse;
      import java.net.URLEncoder;
      import java.nio.charset.StandardCharsets;
      import java.util.List;
      
      /**
       *
       * @author songwp
       * @since 2023-04-20 14:04:42
       */
      @Slf4j
      public class EasyExcelUtil {
      
          /**
           * 導出excel
           *
           * @param response          響應實體類
           * @param sheetName         sheet頁簽名稱
           * @param clazz             模板的字節碼對象
           * @param list              需要導出的數據列表
           * @throws ZhaixingException 業務異常
           */
          public static void exportExcel(HttpServletResponse response,
                                         String sheetName,
                                         Class clazz,
                                         List<?> list) throws ZhaixingException {
              try {
                  String fileName = URLEncoder.encode(sheetName, StandardCharsets.UTF_8).replaceAll("\\+", "%20");
                  response.setContentType("application/vnd.ms-excel");
                  response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
                  EasyExcel.write(response.getOutputStream(), clazz).autoCloseStream(Boolean.TRUE).sheet("sheet")
                          .doWrite(list);
              } catch (Exception e) {
                  log.error(e.getMessage(), e);
                  throw new ZhaixingException(InnovationConstants.Ex.EXPORT_EXCEPTION,e.getMessage());
              }
          }
      }

      五、導出方法測試

        /**
           *  教師信息表導出
           * @param response
           */
          @GetMapping("/export")
          public void export(HttpServletResponse response) throws MalformedURLException {
             // 準備數據
              List<Teacher> teachers = new ArrayList<>();
              teachers.add(new Teacher(1,"馬云",new URL("https://money.gucheng.com/UploadFiles_6503/201901/2019012516201400.jpg"),1,"未任教","浙江杭州"));
              teachers.add(new Teacher(2,"王健林",new URL("https://img1.cache.netease.com/ent/2016/8/23/20160823221523324f5.jpg"),1,"未任教","上海浦東新區"));
              teachers.add(new Teacher(3,"雷軍",new URL("https://i1.073img.com/140526/5808312_102252_1.jpg"),1,"未任教","北京通州區"));
              teachers.add(new Teacher(4,"馬化騰",new URL("https://x0.ifengimg.com/res/2020/F43C0869EE9D07C77C0D82D13266BB1F94DBD148_size583_w1944_h1639.jpeg"),1,"未任教","中國深圳"));
           // 方法一        
              response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
              response.setCharacterEncoding("utf-8");
              // 這里URLEncoder.encode可以防止中文亂碼 當然和easyexcel沒有關系
              String fileName = null;
              try {
                  fileName = URLEncoder.encode("教師信息表", "UTF-8").replaceAll("\\+", "%20");
              } catch (UnsupportedEncodingException e) {
                  throw new RuntimeException(e);
              }
              response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
              try {
                  EasyExcel.write(response.getOutputStream(), Teacher.class).sheet("教師信息表").doWrite(teachers);
              } catch (IOException e) {
                  throw new RuntimeException(e);
              }
           // 方法二
           EasyExcelUtil.exportExcel(response,"教師信息表", Teacher.class,teachers) 
          }

      六、導出文件效果展示

       

      posted @ 2023-03-30 11:22  [奮斗]  閱讀(7453)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 深夜福利视频在线播放| 亚洲中文字幕在线无码一区二区| 国产蜜臀在线一区二区三区| 国产亚洲av夜间福利香蕉149| 免费AV片在线观看网址| 人人妻人人澡人人爽| 天堂网国产| 国产成人av电影在线观看第一页| 亚洲日韩亚洲另类激情文学| 精品久久人人做爽综合| 国产成人精品视频不卡| 一区二区在线观看 激情| 制服丝袜国产精品| 日本a在线播放| 国产午夜福利高清在线观看| 亚洲香蕉伊综合在人在线| 精品国产一区av天美传媒| 色老99久久精品偷偷鲁| 久国产精品韩国三级视频| 他掀开裙子把舌头伸进去添视频| 亚洲av二区伊人久久| 久久国产精品老女人| 高清国产av一区二区三区| 国产gaysexchina男外卖| 国产精品看高国产精品不卡| 亚洲跨种族黑人xxxxx| 成人亚洲av免费在线| 久久99精品国产麻豆婷婷| 精品国产精品中文字幕| 久热伊人精品国产中文| 无码人妻视频一区二区三区| 精品午夜福利短视频一区| 国产在线欧美日韩精品一区| 海兴县| 午夜福利日本一区二区无码| 久久精品国产亚洲精品| 亚洲中文精品一区二区| 日韩亚洲国产激情一区二区| 精品黄色av一区二区三区| 日韩中文日韩中文字幕亚| 国产午夜精品理论大片|