利用Hutool工具類下載Excel


`

           <!-- Hutool引入maven依賴-->
          <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.3.5</version>
          </dependency>
  
     <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.1</version>
    </dependency>

`

`

  package com.yoyo.excel.vo;

  import cn.hutool.core.annotation.Alias;

  import java.io.Serializable;

  public class StudentVo implements Serializable {

/**
 * @Alias("")
 * 此注解為hutool用注解,效果是生成表頭
 * 但是請注意!
 * 此注解於ExcelWriter.addHeaderAlias("sex", "性別 ");沖突只能選用其一
 */
private String name;
/**
 * @Alias("年齡")
 */
private Integer age;

private String sex;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Integer getAge() {
    return age;
}

public void setAge(Integer age) {
    this.age = age;
}

public String getSex() {
    return sex;
}

public void setSex(String sex) {
    this.sex = sex;
}

@Override
/**
 * 為了測試效果,線上可以不加
 */
public String toString() {
    return "StudentVo{" +
            "name='" + name + '\'' +
            ", age=" + age +
            ", sex='" + sex + '\'' +
            '}';
}

/**
 * 下面全部為建造者模式代碼
 * @param builder
 */
public StudentVo(Builder builder) {
    this.name = builder.name;
    this.age = builder.age;
    this.sex = builder.sex;
}

public static Builder newBuilder () {
    return new Builder();
}

public static final class Builder {

    private String name;
    private Integer age;
    private String sex;

    private Builder() {

    }

    public Builder name(String val) {
        this.name = val;
        return this;
    }

    public Builder age(Integer val) {
        this.age = val;
        return this;
    }

    public Builder sex(String val) {
        this.sex = val;
        return this;
    }

    public StudentVo builder() {
        return new StudentVo(this);
    }
}

  }

  package com.yoyo.excel.controller;
  import cn.hutool.core.collection.CollUtil;
  import cn.hutool.core.io.IoUtil;
  import cn.hutool.poi.excel.ExcelWriter;
  import cn.hutool.poi.excel.ExcelUtil;
  import com.yoyo.excel.vo.StudentVo;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.RestController;

  import javax.servlet.ServletOutputStream;
  import javax.servlet.http.HttpServletResponse;
  import java.io.IOException;
  import java.util.List;

  @RestController
  @RequestMapping(value = "/hutool")
  public class HutoolController {
@Autowired
private static final Logger log = LoggerFactory.getLogger(HutoolController.class);
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void hutoolExcel(HttpServletResponse response) {
    ExcelWriter ExcelWriter = ExcelUtil.getWriter("test.xls");
    //設置表頭
    ExcelWriter.addHeaderAlias("name", "名字");
    ExcelWriter.addHeaderAlias("age", "年齡");
    ExcelWriter.addHeaderAlias("sex", "性別 ");
    //測試數據,使用建造者模式構造
    StudentVo studentVo1 = StudentVo.newBuilder()
            .name("張三")
            .age(18)
            .sex("男")
            .builder();
    StudentVo studentVo2 = StudentVo.newBuilder()
            .name("李四")
            .age(19)
            .sex("男")
            .builder();
    StudentVo studentVo3 = StudentVo.newBuilder()
            .name("王五")
            .age(20)
            .sex("女")
            .builder();
    StudentVo studentVo4 = StudentVo.newBuilder()
            .name("趙六")
            .age(21)
            .sex("女")
            .builder();
    List<StudentVo> rows = CollUtil.newArrayList(studentVo1, studentVo2, studentVo3, studentVo4);
    rows.forEach(x->{
        log.info("對象 {}", x.toString());
    });
    log.info("准備生成Excel {}",ExcelWriter.getRowCount());
    ExcelWriter.write(rows, true);
    log.info("生成完畢 准備輸出");
    response.setContentType("application/octet-stream;charset=utf-8");
    response.setHeader("Content-disposition", "attachment;filename=" + "test" + ".xls");
    try {
        ServletOutputStream out = response.getOutputStream();
        ExcelWriter.flush(out, true);
        ExcelWriter.close();
        IoUtil.close(out);
    } catch (IOException e) {
        log.error("發生異常 異常原因:{} {}", e.getMessage(), e);
    } catch (Exception j) {
        log.error("發生異常 異常原因:{} {}", j.getMessage(), j);
    }
}
  }

`

  例如:
     @GetMapping(value = "/getCapitalOrderListDtoDownload")
      public void getCapitalOrderListDtoDownload(HttpServletResponse response,
                                           @RequestParam(value = "supplierId") Long supplierId,
                                           @ApiParam(name = "orderType", value = "訂單類型(-1全部 0自營,1分銷,2,免單,3直播訂單)")
                                               @RequestParam(value = "orderType", required = false) Integer orderType,
                                           @RequestParam(required = false, value = "startTime") String startDate,
                                           @RequestParam(required = false, value = "endTime") String endDate,
                                           @RequestParam(value = "name") String name) {
        List<CapitalOrderResponse> employees0 = orderDetailService.getCapitalOrderListDtoDownLoad(supplierId, orderType, startDate, endDate, name,1,10000);
        List<CapitalOrderResponseV2> employees=new ArrayList<>();
    if(CollUtil.isNotEmpty(employees0)){
        for (CapitalOrderResponse item :employees0){
            CapitalOrderResponseV2 model=new CapitalOrderResponseV2();
            model.setAgentName(item.getAgentName());
            model.setOrderNo(item.getOrderNo());
            model.setAmount(item.getAmount());
            model.setAcceptedAmount(item.getAcceptedAmount());
            model.setDueInAmount(item.getDueInAmount());
            model.setCreateDate(DateUtil.formatDateTime(item.getCreateDate()));
            model.setFinishTime(DateUtil.formatDateTime(item.getFinishTime()));
            employees.add(model);
        }
    }
    ExcelWriter writer = ExcelUtil.getWriter();
    writer.addHeaderAlias("agentName", "店鋪名稱");
    writer.addHeaderAlias("orderNo", "訂單號");
    writer.addHeaderAlias("amount", "實付金額");
    writer.addHeaderAlias("acceptedAmount", "已收金額");
    writer.addHeaderAlias("dueInAmount", "待收金額");
    writer.addHeaderAlias("createDate", "下單時間");
    writer.addHeaderAlias("finishTime", "完成時間");
    writer.write(employees, true);
    response.setContentType("application/vnd.ms-excel;charset=utf-8");
    String namettt = "zijintongji";
    response.setHeader("Content-Disposition", "attachment;filename=" + namettt + ".xls");
    ServletOutputStream out = null;
    try {
        out = response.getOutputStream();
        writer.flush(out, true);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        writer.close();
    }
    IoUtil.close(out);
}


 	
          //二次優化后的接口,使代碼看起來更簡潔  
          @GetMapping("/getMembershipLevelListDownload")
      @ApiOperation(value = "多條件查詢會員列表", response = MemberInfoDto.class)
      public void getMembershipLevelListDownload(HttpServletResponse response,
						@RequestParam(required = false) @ApiParam(name = "beginTime", value = "注冊開始時間") String beginTime,
						@RequestParam(required = false) @ApiParam(name = "endTime", value = "注冊結束時間") String endTime,
						@RequestParam(required = false) @ApiParam(name = "certificationStatus", value = "實名認證狀態(0:未認證,1:已認證)") Integer  certificationStatus,
						@RequestParam(required = false) @ApiParam(name = "status", value = "會員狀態:0:正常,1:凍結,2:拉黑") Integer status,
						@RequestParam(required = false) @ApiParam(name = "grade", value = "等級名稱") String grade,
						@RequestParam(required = false) @ApiParam(name = "address", value = "地區") String address,
						@RequestParam(required = false) @ApiParam(name = "userType", value = "會員類型") String userType,
						@RequestParam(required = false) @ApiParam(name = "keyWords", value = "搜索關鍵詞") String keyWords,
						@RequestParam(required = false) @ApiParam(name = "page", value = "當前頁", defaultValue = "1") Integer page,
						@RequestParam(required = false) @ApiParam(name = "pageSize", value = "每頁條數", defaultValue = "10") Integer pageSize
        ) {
	try {
	Page<MemberInfoDto> list = tbUserInfoService.getMembershipLevelList(beginTime, endTime, certificationStatus, status, grade, address, userType, keyWords, page, pageSize);
	          List<MemberInfoDto> memberInfoDtoList = list.getRecords();
	          //此處為需要下載字段的對象二次封裝,和原對象完全一致可以跳過這一步
	          List<MemberInfoDownload> dataList = new ArrayList();
	          for(MemberInfoDto  m : memberInfoDtoList ){
		  MemberInfoDownload md = new MemberInfoDownload();
		  BeanUtils.copyProperties(m,md);
		  dataList.add(md);
	             }
	            String fileName = "huiyuan" +new SimpleDateFormat("yyyy-MM-dd").format(new Date());
	            ServletOutputStream out = response.getOutputStream();
	            response.setContentType("multipart/form-data");
	            response.setCharacterEncoding("utf-8");
	            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx");
	            List<String> header = CollUtil.newArrayList("用戶名稱", "真實姓名", "手機號", "身份證號",
												"推薦人名稱", "會員狀態", "余額", "提現金額",
												"消費金額","充值金額", "自營產品數", "分銷產品數",
												"注冊時間","登錄時間", "最后一次登錄地址");
                    //isXlsx 是否為xlsx格式
		ExcelWriter excelWriter = ExcelUtil.getWriter(true);
		excelWriter.writeHeadRow(header);
		excelWriter.write(getListRow(dataList));
		excelWriter.flush(response.getOutputStream());
		excelWriter.close();
		out.flush();
	} catch (Exception e) {
		e.printStackTrace();
	}

        }
        private List<MemberInfoDownload> getListRow(List<MemberInfoDownload> memberInfoDtoList) {
	List<MemberInfoDownload> rows = new ArrayList<>();
	memberInfoDtoList.stream().forEach(md -> {
		MemberInfoDownload me = new MemberInfoDownload();
		BeanUtils.copyProperties(md,me);
		rows.add(me);
	});
	return rows;
        }
  `


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM