导出word模板并进行赋值

工作中遇到合同模块,因为合同需要导出word并进行赋值,且有固定的的格式,所以进行记录。废话不多说,上代码!!

 @RequestMapping(value = "/importExcel", method = RequestMethod.GET)
	 public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response,String id) {
		 try {
			 //获取模板文件
			 String path = "C:\\Users\\Administrator\\Desktop\\中天合同示例.docx";
//			 String path = wordPath+"/contract_model.docx";
			 System.out.println("path:"+path);
			 File demoFile = new File(path);
			 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
			 FileInputStream in = new FileInputStream(demoFile);
			 XWPFDocument hdt = new XWPFDocument(in);
			 //替换读取到的word模板内容的指定字段
			 //第一步查询数据库
			 EpIndentContractDto contractDto = service.findById(id);
			 String billdate = simpleDateFormat.format(contractDto.getBilldate());
			 //查询客户
			 EpBaseCompany baseCompany = companyService.getById(contractDto.getCompanyId());
			 if (baseCompany == null){
				 baseCompany = new EpBaseCompany();
			 }
			 //查询交易单位
			 EpBaseTrade trade = tradeService.getById(contractDto.getTradeId());
			 if (trade == null){
				 trade = new EpBaseTrade();
			 }

			 Map<String, Object> map = new HashMap<String, Object>();
			 map.put("gf", StringUtils.isNotBlank(trade.getName())?trade.getName():"");
			 map.put("xf", StringUtils.isNotBlank(contractDto.getCompanyName())?contractDto.getCompanyName():"");
			 map.put("htbh", StringUtils.isNotBlank(contractDto.getContcode())?contractDto.getContcode():"");
			 map.put("qysj", billdate);
//			 map.put("gkhyh", StringUtils.isNotBlank(trade.getBank())?trade.getBank():"");
//			 map.put("xkhyh", StringUtils.isNotBlank(baseCompany.getBank())?baseCompany.getBank():"");
//			 map.put("gzh", StringUtils.isNotBlank(trade.getAccount())?trade.getAccount():"");
//			 map.put("xzh", StringUtils.isNotBlank(baseCompany.getAccount())?baseCompany.getAccount():"");
			 ExportWordUtil.replaceParams(hdt,map);
			 //此处为表格中数据
			 //设置表格数据
			 Map<String, Object> tableMap = new HashMap<String, Object>();
			 int index = 0;
			 List<EpIndentContractDetail> children = contractDto.getChildren();
			 if (children!=null){
				 for (int i = 0; i < children.size(); i++) {
					 tableMap.put("a"+(i*10+1),children.get(i).getProductName());
					 tableMap.put("a"+(i*10+2),StringUtils.isNotBlank(children.get(i).getSpec())?children.get(i).getSpec():"");
					 if (StringUtils.isNotBlank(children.get(i).getUnitType())){
						 List<DictModel> unit = ToolPubFun.getDictModelList("p_unit", children.get(i).getUnitType());
						 tableMap.put("a"+(i*10+3),unit.get(0).getTitle());
					 }else {
						 tableMap.put("a"+(i*10+3),"");
					 }
					 tableMap.put("a"+(i*10+4),children.get(i).getQuantity()==null? 0:children.get(i).getQuantity().intValue());
					 tableMap.put("a"+(i*10+5),children.get(i).getPrice()==null?0:children.get(i).getPrice().intValue());
					 tableMap.put("a"+(i*10+6),children.get(i).getAmount()==null?0:children.get(i).getAmount().intValue());
					 if (children.get(i).getDelidate()!=null){
						 String s = simpleDateFormat.format(children.get(i).getDelidate());
						 tableMap.put("a"+(i*10+7),s);
					 }else {
						 tableMap.put("a"+(i*10+7),"");
					 }
					 tableMap.put("a"+(i*10+8),StringUtils.isNotBlank(children.get(i).getRemark())?children.get(i).getRemark():"");
				 }
				 index = children.size();
			 }
			 //补空值
			 for (int i = index; i < 3; i++) {
				 tableMap.put("a"+(i*10+1),"");
				 tableMap.put("a"+(i*10+2),"");
				 tableMap.put("a"+(i*10+3),"");
				 tableMap.put("a"+(i*10+4),"");
				 tableMap.put("a"+(i*10+5),"");
				 tableMap.put("a"+(i*10+6),"");
				 tableMap.put("a"+(i*10+7),"");
				 tableMap.put("a"+(i*10+8),"");
			 }
			 tableMap.put("jex", contractDto.getAmount().intValue());
			 String case2 = upperCase2(contractDto.getAmount().intValue());
			 tableMap.put("jed", case2);
			 //表格添加供需方信息
			 tableMap.put("gf", StringUtils.isNotBlank(trade.getName())?trade.getName():"");
			 tableMap.put("xf", StringUtils.isNotBlank(contractDto.getCompanyName())?contractDto.getCompanyName():"");
			 tableMap.put("gkhyh", StringUtils.isNotBlank(trade.getBank())?trade.getBank():"");
			 tableMap.put("xkhyh", StringUtils.isNotBlank(baseCompany.getBank())?baseCompany.getBank():"");
			 tableMap.put("gzh", StringUtils.isNotBlank(trade.getAccount())?trade.getAccount():"");
			 tableMap.put("xzh", StringUtils.isNotBlank(baseCompany.getAccount())?baseCompany.getAccount():"");

			 ExportWordUtil.replaceTableParams(hdt,tableMap);
			 //!!若还有其他表格则继续按以上格式生成对应关键字的map做替换。

			 //输出word内容文件流,提供下载
			 response.setContentType("application/vnd.ms-word;charset=utf-8");
			 response.setCharacterEncoding("utf-8");
			 response.addHeader("Cache-Control", "no-cache");

			 String fileName = "文件名";
			 // Content-disposition属性设置成以附件方式进行下载
			 // URLEncoder.encode解决中文名乱码(attachment;filename=中文文件名)
			 try {
				 response.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8")+".docx");
			 } catch (UnsupportedEncodingException e) {
				 e.printStackTrace();
			 }

			 try {
				 OutputStream outputStream = response.getOutputStream();
				 outputStream.flush();
				 hdt.write(outputStream);
				 outputStream.close();
			 } catch (IOException e) {
				 e.printStackTrace();
			 }
		 } catch (IOException e) {
			 e.printStackTrace();
		 } catch (Exception e) {
			 e.printStackTrace();
		 }
		 return null;
	 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值