工作中遇到合同模块,因为合同需要导出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;
}