spring boot +vue 操作 excal之easyExcel 2.x (性別轉換問題和多sheet導入)

導入:https://my.oschina.net/u/3774949/blog/4308820

導出:https://my.oschina.net/u/3774949/blog/4307958

不想在上面改了,太麻煩了,這裏就寫不同的部分

1.實體類(增加 converter

/** 性別 10*/
@ColumnWidth(10)
@ExcelProperty(value = "性別", index = 4,converter = SexConverter.class)
private Integer sex;

2.轉換類

package com...common.easyexcel;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

/**
 * @author xing.li
 */
public class SexConverter implements Converter<Integer> {
    @Override
    public Class supportJavaTypeKey() {
        return Integer.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public Integer convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return "".equals(cellData.getStringValue()) ? 1 : 0;
    }

    @Override
    public CellData convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return new CellData(value.equals(1) ? "" : "");
    }
}

3.導出轉換操作

ExportExcelUtils(增加標紅部分)

/**
 * 使用模板導出Excelweb
 *
 * @param response 響應
 * @param excelName Excel名稱
 * @param data 要導出的數據
 * @throws Exception
 */
public void export2WebWithModel(HttpServletResponse response, String excelName, List data)
    throws Exception {
  InputStream inputStream = ExportExcelUtils.class.getResourceAsStream("/excel/userModel.xlsx");
  ExcelWriter excelWriter =
      EasyExcel.write(response.getOutputStream()).registerConverter(new SexConverter()).withTemplate(inputStream).build();
  try {
    WriteSheet writeSheet = EasyExcel.writerSheet().build();
    response.setContentType("application/vnd.ms-excel");
    response.setCharacterEncoding("utf-8");
    excelName = URLEncoder.encode(excelName, "UTF-8");
    response.setHeader(
        "Content-disposition",
        "attachment;filename="
            + URLEncoder.encode(excelName, "UTF-8")
            + ExcelTypeEnum.XLSX.getValue());
    if (!data.isEmpty()) {
      // 這裏還可以放一個map鍵值對    對應模板中的{{}}
      // 這個list對應模板中的{{.屬性名}}
      excelWriter.fill(data, writeSheet);
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    excelWriter.finish();
  }
}

4.導入轉換操作標紅部分

這裏還改變了多sheet導入(自己對比上面不同之處)

@PostMapping(value = "/....")
@ApiOperation(value = "導入用戶", notes = "導入用戶")
public void parsingExcel(@RequestParam(required = false, value = "file") MultipartFile file) {
  try {
    ExcelReader excelReader =
        EasyExcel.read(new BufferedInputStream(file.getInputStream()))
            .head(UserExcel.class)
            .build();
    List<ReadSheet> sheetList = excelReader.excelExecutor().sheetList();
    for (ReadSheet sheet : sheetList) {
      EasyExcel.read(
              new BufferedInputStream(file.getInputStream()),
              UserExcel.class,
              new ExcelListener(jdbc)).registerConverter(new SexConverter())
          .head(UserExcel.class)
          .sheet(sheet.getSheetNo())
          .doReadSync();
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章