easyExcel模板导出在Linux下和window下运行代码(自己可见)

 file工具类

import java.io.File;
import java.io.InputStream;

public class FileUtil {

    public static InputStream getResourcesFileInputStream(String fileName) {
        return Thread.currentThread().getContextClassLoader().getResourceAsStream("" + fileName);
    }

    public static String getPath() {
        return FileUtil.class.getResource("/").getPath();
    }

    public static File createNewFile(String pathName) {
        File file = new File(getPath() + pathName);
        if (file.exists()) {
            file.delete();
        } else {
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
        }
        return file;
    }

    public static File readFile(String pathName) {
        return new File(getPath() + pathName);
    }
}

业务中代码,后续用到直接模仿即可

/**
	 * 导出  学生信息表
	 */
	@GetMapping("export-studentInfo")
	@ApiOperationSupport(order = 13)
	@ApiOperation(value = "导出", notes = "传入学生信息表")
	public void exportStudentInfo(@ApiIgnore @RequestParam Map<String, Object> student_info, HttpServletResponse response) throws Exception {
		Long id = Long.parseLong(student_info.get("id")+"");
		//查询此学员信息
		StudentInfoEntity studentInfoEntity = student_infoService.getById(id);
		//判断是否为空
		if (!EmptyUtil.isEmpty(studentInfoEntity.getGraduationTime())){
			studentInfoEntity.setGraduationTimeTwo((studentInfoEntity.getGraduationTime()+"").substring(0,10));
		}
		List<Map> kindreds = new ArrayList<>();
		List<Map> learns = new ArrayList<>();
		List<Map> jobs = new ArrayList<>();
		//判断是否为空
		if (!EmptyUtil.isEmpty(studentInfoEntity.getKindred())){
			//获取直系亲属信息
			 kindreds = JSON.parseObject(studentInfoEntity.getKindred(), new TypeReference<ArrayList<Map>>() {});
		}
		if (!EmptyUtil.isEmpty(studentInfoEntity.getLearn())){
			learns = JSON.parseObject(studentInfoEntity.getLearn(), new TypeReference<ArrayList<Map>>() {});
			//数据转换
			for (Map learn : learns) {
				List learnTime = (List) learn.get("learnTime");
				String learnStart = (String) learnTime.get(0);
				String learnEnd = (String) learnTime.get(1);
				String learnStartString = learnStart.substring(0, 7);
				String learnEndString = learnEnd.substring(0, 7);
				learn.remove("learnTime");
				learn.put("learnTime",learnStartString+"~"+learnEndString);
			}
		}
		if (!EmptyUtil.isEmpty(studentInfoEntity.getJob())){
			jobs = JSON.parseObject(studentInfoEntity.getJob(), new TypeReference<ArrayList<Map>>() {});
			for (Map job : jobs) {
				List jobTime = (List) job.get("jobTime");
				String jobStart = (String) jobTime.get(0);
				String jobEnd = (String) jobTime.get(1);
				String jobStartString = jobStart.substring(0, 7);
				String jobEndString = jobEnd.substring(0, 7);
				job.remove("jobTime");
				job.put("jobTime",jobStartString+"~"+jobEndString);
				job.put("jobWorkplace",job.get("kindredWorkplace"));
				job.put("jobOffice",job.get("kindredOffice"));
				job.remove("kindredWorkplace");
				job.remove("kindredOffice");
			}
		}
		InputStream inputStream = FileUtil.class.getClassLoader().getResourceAsStream("MODEL.xls");
		response.setContentType("application/vnd.ms-excel");
		response.setCharacterEncoding(Charsets.UTF_8.name());
		String fileName = URLEncoder.encode(studentInfoEntity.getStudentName()+"个人简历--" + DateUtil.time(), Charsets.UTF_8.name());;
		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");
		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(inputStream)
			.registerWriteHandler(new ImageCellWriteHandler())
			.excelType(ExcelTypeEnum.XLS)
			.build();
			WriteSheet writeSheet = EasyExcel.writerSheet().build();
			// 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
			// forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
			// 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
			// 如果数据量大 list不是最后一行 参照下一个
			FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.FALSE).build();;
			excelWriter.fill(new FillWrapper("kindreds", kindreds),fillConfig, writeSheet);
			excelWriter.fill(new FillWrapper("jobs", jobs),fillConfig, writeSheet);
			excelWriter.fill(new FillWrapper("learns", learns),fillConfig, writeSheet);
			String img = studentInfoEntity.getImg();
			if (!EmptyUtil.isEmpty(img)){
				String[] split = img.split("/");
				ApplicationHome h = new ApplicationHome(getClass());
				File jarF = h.getSource();
				String path = jarF.getParentFile().toString();
				int i = path.lastIndexOf("/");
				if (i > 0) {
					path = path.substring(0,i+1);
				}
				System.out.println(path);
				HttpUtil.downloadFileFromUrl(img, path);
				// 填充图片
				File file = new File(path+File.separator+split[6]);
				// 注意:这里需要回原来的key里
				studentInfoEntity.setImgs(FileUtils.readFileToByteArray(file));
				//删除文件
				file.delete();
			}
			excelWriter.fill(studentInfoEntity,fillConfig, writeSheet);
			excelWriter.finish();
	}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值