content: package com.xiliu.server.utils;
  
  import com.alibaba.excel.EasyExcel;
  import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
  import org.springframework.web.multipart.MultipartFile;
  
  import javax.servlet.http.HttpServletResponse;
  import java.io.IOException;
  import java.io.InputStream;
  import java.net.URLEncoder;
  import java.util.List;
  
  /**
   * @author xiliu
   * @description
   * @date 2022/10/25
   */
  public class ExcelUtils {
  
      public static List<?> importEasyExcel(InputStream is, Class<?> pojoClass) throws Exception {
          return EasyExcel.read(is).head(pojoClass).sheet().doReadSync();
      }
  
      public static void exportEasyExcel(HttpServletResponse response, Class<?> pojoClass, List<?> list, String sheetName) {
          try {
              EasyExcel.write(response.getOutputStream(), pojoClass).sheet(sheetName).doWrite(list);
          } catch (IOException e) {
              e.printStackTrace();
              throw new RuntimeException(e.getMessage());
          }
      }
  
      /**
       * 将列表以 Excel 响应给前端
       *
       * @param response 响应
       * @param filename 文件名
       * @param sheetName Excel sheet 名
       * @param head Excel head 头
       * @param data 数据列表哦
       * @param <T> 泛型，保证 head 和 data 类型的一致性
       * @throws IOException 写入失败的情况
       */
      public static <T> void write(HttpServletResponse response, String filename, String sheetName,
                                   Class<T> head, List<T> data) throws IOException {
          // 输出 Excel
          EasyExcel.write(response.getOutputStream(), head)
                  // 不要自动关闭，交给 Servlet 自己处理
                  .autoCloseStream(false)
                  // 基于 column 长度，自动适配。最大 255 宽度
                  .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                  .sheet(sheetName).doWrite(data);
          // 设置 header 和 contentType。写在最后的原因是，避免报错时，响应 contentType 已经被修改了
          response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
          response.setContentType("application/vnd.ms-excel;charset=UTF-8");
      }
  
      public static <T> List<T> read(MultipartFile file, Class<T> head) throws IOException {
          return EasyExcel.read(file.getInputStream(), head, null)
                  // 不要自动关闭，交给 Servlet 自己处理
                  .autoCloseStream(false)
                  .doReadAllSync();
      }
  }
  