java excel 模板 替换_替换WORD/EXCEL模板文档中的内容并下载java

这篇博客介绍如何使用Java动态替换Excel和Word模板中的内容,并将处理后的文件提供下载。通过FileInputStream和相关库,实现了读取模板、替换指定字段、输出流到HTTP响应,供用户下载。
摘要由CSDN通过智能技术生成

/** 案件模板下载

*

**/

public static voidgenerateFile(HttpServletRequest request,HttpServletResponse response){Map map =FastMap.newInstance();String calendarYear= request.getParameter("calendarYear");map.put("201X", calendarYear); //需要替换的内容 key为被替换者String engFileTemplateName= "C:\Users\NUH-25\Desktop\ENG20160131.xlsx"; //被替换模板路径

String fileType= engFileTemplateName.substring(engFileTemplateName.lastIndexOf(".") + 1, engFileTemplateName.length());if("xls".equals(fileType)||"xlsx".equals(fileType))

readwriteExcel(request,response,map,engFileTemplateName);else if("doc".equals(fileType)||"docx".equals(fileType))

readwriteWord(request,response,map,engFileTemplateName);

}public static void readwriteWord(HttpServletRequest request,HttpServletResponse response,Mapmap,String engFileTemplateName){FileInputStream in;

HWPFDocument hdt= null;try{

in= new FileInputStream(newFile(engFileTemplateName));

hdt= newHWPFDocument(in);

}catch(Exception e1) {

e1.printStackTrace();

}

Fields fields=hdt.getFields();

Iterator it =fields.getFields(FieldsDocumentPart.MAIN).iterator();/*while(it.hasNext()){

System.out.println(it.next().getType());

}*/

//替换读取到的word模板内容的指定字段

Range range =hdt.getRange();for (Map.Entryentry:map.entrySet()) {

range.replaceText(entry.getKey(),entry.getValue());

}//输出word内容文件流,提供下载

response.reset();

response.setContentType("application/x-msdownload");

response.setCharacterEncoding("gbk");

String fileType= engFileTemplateName.substring(engFileTemplateName.lastIndexOf(".") + 1, engFileTemplateName.length());

String fileName= ""+System.currentTimeMillis()+"."+fileType;

response.addHeader("Content-Disposition", "attachment; filename="+fileName);

ByteArrayOutputStream ostream= newByteArrayOutputStream();

OutputStream servletOS= null;try{

servletOS=response.getOutputStream();

hdt.write(ostream);

servletOS.write(ostream.toByteArray());

servletOS.flush();

servletOS.close();

}catch(Exception e) {

e.printStackTrace();

}

}/***

* 案件附件模板excel修改下载

*

*@paramrequest

*

*@paramresponse

*

*@throwsIOException*/

public static void readwriteExcel(HttpServletRequest request,HttpServletResponse response,Mapmap,String engFileTemplateName){try{String fileType= engFileTemplateName.substring(engFileTemplateName.lastIndexOf(".") + 1, engFileTemplateName.length());

FileInputStream in= new FileInputStream(newFile(engFileTemplateName));;

InputStream inputStream= newBufferedInputStream(in);

Workbook workbook= null;if (fileType.equals("xls")) {

workbook= newHSSFWorkbook(inputStream);

}else if (fileType.equals("xlsx")) {//workbook = new XSSFWorkbook(inputStream);

workbook =WorkbookFactory.create(inputStream);

}else{

System.out.println("您输入的excel格式不正确");

}

Iterator iterator =workbook.sheetIterator();while(iterator.hasNext()){

Sheet sheet=iterator.next();for(Row row:sheet){for(Cell cell:row){if(1==cell.getCellType()){

String cellString=cell.getStringCellValue();for (Map.Entryentry:map.entrySet()) {if(cellString.contains(entry.getKey())){

String newString=cellString.replace(entry.getKey(), entry.getValue());

cell.setCellValue(newString);

}

}

}

}

}

}//输出excel内容文件流,提供下载

response.reset();

response.setContentType("application/x-msdownload");

response.setCharacterEncoding("gbk");

String fileName= ""+System.currentTimeMillis()+"."+fileType;

response.addHeader("Content-Disposition", "attachment; filename="+fileName);

ByteArrayOutputStream ostream= newByteArrayOutputStream();

OutputStream servletOS= null;try{

servletOS=response.getOutputStream();

workbook.write(ostream);

servletOS.write(ostream.toByteArray());

servletOS.flush();

servletOS.close();

}catch(Exception e) {

e.printStackTrace();

}

}catch(Exception e)

{

e.printStackTrace();

Debug.logError(e, module);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值