导出excel,导出模板Excel(双工作蒲)压缩文件导出(即下载文件)

这篇具有很好参考价值的文章主要介绍了导出excel,导出模板Excel(双工作蒲)压缩文件导出(即下载文件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

/**
	 * 导出报告
	 */
	@GetMapping("/report")
	@ApiOperationSupport(order = 17)
	@ApiOperation(value = "导出报告", notes = "传入ids")
	public void exportReport(@RequestParam String ids, HttpServletResponse response) {
		List<FlangeJoint> joints = flangeJointService.listByIds(Func.toLongList(ids));

		String uuid = UUID.randomUUID().toString();
		ClassPathResource classPathResource = new ClassPathResource("templates/report-tpl.xlsx");

		Path zipPath = Paths.get(pathProperties.getReport(), uuid+".zip");
		File zipFile = zipPath.toFile();
		if(zipFile.exists()){
			zipFile.delete();//如果文件存在则先删除旧的文件
		}

		List<File> files = null;
		try{
			if(!zipFile.getParentFile().exists()){
				Files.createDirectories(zipPath.getParent());
			}
//			if(!zipFile.exists()){
//				Files.createFile(zipPath);
//			}

			files = joints.stream()
				.filter(j -> j.getStatus() == 4)
				.map(joint -> {
					FlangeJointVO flangeJointVO = new FlangeJointVO();
					BeanUtil.copy(joint, flangeJointVO);
					String jointNo = joint.getJointNo();
					String packageNo = joint.getPackageNo();
					String fileName = packageNo + "-" + jointNo + ".xlsx";
					Path filePath = Paths.get(pathProperties.getReport(), uuid, fileName);
					File file = filePath.toFile();

					InputStream is = null;
					FileOutputStream fos = null;
					try{
						if(!file.getParentFile().exists()){
							Files.createDirectories(filePath.getParent());
						}
						if(!file.exists()){
							Files.createFile(filePath);
						}

						is = classPathResource.getInputStream();
						fos = new FileOutputStream(file);
						ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(is).build();

						WriteSheet sheetE = EasyExcel.writerSheet(0).build();
						WriteSheet sheetC = EasyExcel.writerSheet(1).build();

						Long projectId = joint.getProjectId();
						ProjectInfo projectInfo = projectInfoService.getById(projectId);
						if (projectInfo!=null){
							flangeJointVO.setCustName(projectInfo.getCustName());
							flangeJointVO.setProjectName(projectInfo.getName());
							flangeJointVO.setProjectAddress(projectInfo.getAddress());
							flangeJointVO.setDate(LocalDate.now().toString());
						}
						String faceEast = flangeJointVO.getFaceEast();
						String faceNorth = flangeJointVO.getFaceNorth();
						String faceSouth = flangeJointVO.getFaceSouth();
						String faceWest = flangeJointVO.getFaceWest();
						String offsetEast = flangeJointVO.getOffsetEast();
						String offsetNorth = flangeJointVO.getOffsetNorth();
						String offsetSouth = flangeJointVO.getOffsetSouth();
						String offsetWest = flangeJointVO.getOffsetWest();
						if ("ACC".equals(faceEast) && "ACC".equals(faceNorth) && "ACC".equals(faceSouth) && "ACC".equals(faceWest)){
							flangeJointVO.setFlangeFace("Good");
							if ("ACC".equals(offsetEast) && "ACC".equals(offsetNorth) && "ACC".equals(offsetSouth) && "ACC".equals(offsetWest)){
								flangeJointVO.setFlangeAlighment("Good");
							}else {
								flangeJointVO.setFlangeAlighment("Fail");
							}
						}else {
							flangeJointVO.setFlangeFace("Fail");
							flangeJointVO.setFlangeAlighment("Fail");
						}
						int sno = reportSnoService.getSno(projectId);
						flangeJointVO.setReportNo(String.format("%05d", sno));
						Integer passPressure1 = flangeJointVO.getPassPressure1();
						Integer passPressure2 = flangeJointVO.getPassPressure2();
						flangeJointVO.setRightActualTorque(flangeJointVO.getActualTorque());
						if (passPressure1!=null || passPressure2!=null){
							flangeJointVO.setRightActualTorque(null);
							flangeJointVO.setBoltLoad(null);
						}else {
							flangeJointVO.setActualTorque(null);
							flangeJointVO.setPassPressure1(null);
							flangeJointVO.setPassPressure2(null);
							flangeJointVO.setBoltStress(null);
						}
						excelWriter.fill(flangeJointVO, sheetE);
						excelWriter.fill(flangeJointVO, sheetC);
						excelWriter.finish();
					}catch(Exception e1){
						e1.printStackTrace();
					}finally{
						if(fos != null) try{ fos.close(); }catch(Exception e2){e2.printStackTrace();}
						if(is != null) try{ is.close(); }catch(Exception e3){e3.printStackTrace();}
					}
					return file;
				}).collect(Collectors.toList());

			ZipUtil.zipFile(files, zipPath.toFile().getAbsolutePath());
		}catch(Exception e){
			e.printStackTrace();
		}finally {
			if(files != null){
				for(File f : files){
					if(f.exists()) f.delete();
				}
			}
			Path dirPath = Paths.get(pathProperties.getReport(), uuid);
			if(dirPath.toFile().exists()){
				dirPath.toFile().delete();
			}
		}

		//下载文件
		InputStream inStream = null;
		try {
			if(!zipFile.exists()){
				return ;
			}
			inStream = new FileInputStream(zipFile);
			response.reset();
			response.setContentType("application/zip");
			response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(zipFile.getName(), "UTF-8"));
			response.setCharacterEncoding("UTF-8");
			IoUtil.copy(inStream, response.getOutputStream());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (inStream != null) {
				try { inStream.close(); } catch (IOException e) { e.printStackTrace(); }
			}
		}
	}

下面是文件表格和entity对象文章来源地址https://www.toymoban.com/news/detail-527000.html

@Data
@TableName("t_flange_joint")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "FlangeJoint对象", description = "法兰节点表")
public class FlangeJoint extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 所属项目
     */
    @ApiModelProperty(value = "所属项目")
    private Long projectId;
    /**
     * 节点编号
     */
    @ApiModelProperty(value = "节点编号")
    private String jointNo;
    /**
     * 管线编号
     */
	@TableField(updateStrategy = FieldStrategy.IGNORED)
    @ApiModelProperty(value = "管线编号")
    private String lineNo;
    /**
     * 包编号
     */
    @ApiModelProperty(value = "包编号")
    private String packageNo;
    /**
     * 图纸编号
     */
    @ApiModelProperty(value = "图纸编号")
    private String isometricNo;
    /**
     * 节点序列号
     */
	@TableField(updateStrategy = FieldStrategy.IGNORED)
    @ApiModelProperty(value = "节点序列号")
    private String labelNo;
    /**
     * 节点类型
     */
    @ApiModelProperty(value = "节点类型")
    private String jointType;
    /**
     * pid
     */
    @ApiModelProperty(value = "pid")
    private String pid;
    /**
     * 法兰尺寸
     */
    @ApiModelProperty(value = "法兰尺寸")
    private String flangeSize;
    /**
     * 法兰磅级
     */
    @ApiModelProperty(value = "法兰磅级")
    private String flangeRating;
    /**
     * 法兰材质
     */
	@TableField(updateStrategy = FieldStrategy.IGNORED)
    @ApiModelProperty(value = "法兰材质")
    

到了这里,关于导出excel,导出模板Excel(双工作蒲)压缩文件导出(即下载文件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java下载excel模板文件

    最近做了一个导入Excel的功能,需求: 先提供一个下载Excel模板的功能。 用户下载好模板后,可以在模板文件当中填写要上传的内容,填写完过后再进行导入Excel,然后将用户填写的数据保存到数据库当中。 1.将模板放到resources目录下,尽量创建一个专门的文件夹来存放模板

    2024年02月15日
    浏览(57)
  • Java下载Excel模板文件的实现

    在项目中经常会用到文件下载的功能,比如下载excel模板,这里简单记录一下实现过程 1、将模板文件放到项目资源文件目录中,也可以自定义其他位置,只要通过路径能找到该文件就行:  2、controller层写下载的接口 3、前端直接调用这个接口就可以实现下载啦

    2024年02月11日
    浏览(47)
  • 后端:使用easyExcel实现解析Excel文件读取数据。前端:Excel模板下载、前端上传文件

            本篇是EasyExcel快速入门知识,讲解如何读取Excel文件,对Excel中错误信息如空字符、必填项为空、表格格式校验做到处理 ,并给出了实际项目中示例代码;为什么要使用easyexcel;原因是相比于poi,easyexcel更加轻量级,读取写入API方便,并且在工作中占用内存较小;

    2024年02月05日
    浏览(76)
  • java设置可供下载的excel模板文件

    2024年01月19日
    浏览(35)
  • #vue3 实现前端下载excel文件模板功能

    一、需求: 前端无需通过后端接口,即可实现模板下载功能。 通过构造一个 JSON 对象,使用前端常用的 第三方库 xlsx ,可以直接将该 JSON 对象转换成 Excel 文件,让用户下载模板 二、效果: 三、源码如下:

    2024年01月19日
    浏览(70)
  • vue+xlsx实现前端模版下载、导入和导出excel文件

    产品需求:后端不想写下载,导入和导出的接口,让我们前端自己实现。 这里我们就可以用xlsx插件来实现,我们不多说了,先放一下实现的图片,下面我们分别把模版下载、导入和导出的代码放上来,想用的话,直接复制粘贴即可! 模版下载图片 导出图片: 好了,下面我

    2024年02月13日
    浏览(61)
  • Post 和 Get 两种方式实现数据导出Excel文件并下载

    Post 和 Get 两种方式实现数据导出Excel文件并下载 前端使用Vue,后端使用Springboot。 一般而言,使用post方式是比较方便的。但有时候,需要下载的数据在后端进行查询的时候很比较复杂的查询条件,而这个查询条件是前端进行下载请求的时候传递的参数,如果参数比较复杂或参

    2024年02月11日
    浏览(47)
  • 快速上手Django(九) -Django下载文件、Django上传文件、Django实现excel导入导出

    在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载。 1. Django下载文件方案和思路 将文件作为响应返回给用户:这是最常用的下载文件方法。你可以编写一个视图函数,在该函数中将文件作为响应返回给用户。 使用第三方库,如您需要支持断点续传或并发

    2024年02月05日
    浏览(55)
  • js将后端返回的文件流导出为excel,并自定义下载文件名

    一. 需求 后台管理系统,常会出现导出excel表格功能;点击导出按钮,请求后端接口,需要将接口返回的 文件流 导出为excel,实现前端下载excel文件。 但是,返回的数据获取 response 时出现乱码,如图: 二. 实现思路 调用后端下载接口,获取传递过来的二进制数据流 创建 a 标

    2024年02月05日
    浏览(84)
  • vue-cli4前端实现下载本地Excel模板,以及下载静态文件的坑

    a标签的下载功能: 1:bobl ----二进制流文件 Blob对象标识一个不可变、原始数据的类文件对象。Blob表示的不一定是JavaScript原生格式的数据 2:responseType responseType它表示服务器响应的数据类型,由于后台返回来的是二进制数据,所以要把它设为‘blob’ 通过设置responseType为blo

    2024年02月02日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包