怎么使用poi-tl操作word模板,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
站在用戶的角度思考問題,與客戶深入溝通,找到關(guān)嶺網(wǎng)站設計與關(guān)嶺網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設、網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務覆蓋關(guān)嶺地區(qū)。
com.deepoove poi-tl 1.8.2
在電腦E盤中建立word模板:“E:\templete.docx”
修改模板內(nèi)容
標題:{{title}} 工單編號:{{workNo}} 發(fā)單日期:{{issueDate}} 列表數(shù)據(jù):{{*list}}
/** * 根據(jù)word模板生成word文檔 * @param request * @param response */ @RequestMapping(value = "expdoc") public void expdoc(HttpServletRequest request, HttpServletResponse response){ try { String tempFile="E:\\templete.docx"; XWPFTemplate template = XWPFTemplate.compile(tempFile).render( new HashMap() {{ put("title", "Hi, poi-tl Word模板引擎"); put("workNo", "20200910-001"); put("issueDate", "2020年9月10日"); put("list", new NumbericRenderData(new ArrayList () { { //循環(huán)list進行賦值 for(String detail:list){ add(new TextRenderData(detail)); } } })); }}); response.setContentType("application/octet-stream"); response.setHeader("Content-disposition","attachment;filename=\""+"out_template.docx"+"\""); OutputStream out = response.getOutputStream(); BufferedOutputStream bos = new BufferedOutputStream(out); template.write(bos); template.close(); bos.flush(); bos.close(); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } }
在瀏覽器中輸入請求地址:http://localhost:8080/expdoc ,瀏覽器自動下載word文檔,文檔名稱為:out_template.docx
public class YdgdTemplete{ private String demand;//要求 private ListdetailList;//列表數(shù)據(jù) }
/** * 根據(jù)word模板生成數(shù)據(jù)信息,返回文檔訪問地址 * @param request * @param response * @return 文檔訪問地址 * @throws Exception */ @RequestMapping("expdoc") @ResponseBody public BasePageData expdoc(HttpServletRequest request, HttpServletResponse response) throws Exception { BasePageData data = new BasePageData(); try { //獲取根目錄 String realPath = request.getSession().getServletContext().getRealPath("/"); //定義保存文檔目錄 String fileDir = "/fileData/doc/"; File saveFile = new File(realPath + fileDir); if (!saveFile.exists()) {// 如果目錄不存在 saveFile.mkdirs();// 創(chuàng)建文件夾 } //生成word文檔名稱 String fileName = System.currentTimeMillis() + ".docx"; //保存的文件的路徑信息 String docPath = realPath + fileDir + fileName; //返回文檔路徑 String backPath= fileDir + fileName; //封裝數(shù)據(jù) YdgdTemplete ydgdTemplete = new YdgdTemplete(); ydgdTemplete.setDemand("生成測試數(shù)據(jù)"); Listlist = new ArrayList<>(); list.add("第1條記錄"); list.add("第2條記錄"); ydgdTemplete.setDetailList(list); //根據(jù)模板生成word文檔 Boolean falg = FileUtil.createdoc(docPath,ydgdTemplete); //調(diào)用返回 if(falg){ data.setData(backPath); data.setCode(WebResponseCode.APPSUCCESS); data.setMsg("操作成功!"); }else{ data.setData(null); data.setCode(WebResponseCode.APPFAIL); data.setMsg("操作失?。?); } return data; } catch (Exception e) { e.printStackTrace(); data.setCode(WebResponseCode.APPFAIL); data.setMsg("操作異常!"); return data; } }
/** * 根據(jù)word模板生成word文件 * @param docPath * @param ydgdTemplete * @return */ public static boolean createdoc(String docPath, YdgdTemplete ydgdTemplete){ try { if(StringUtil.isBlank(docPath)){ return false; } //讀取模板 File file = ResourceUtils.getFile("classpath:templates/ydgd_templete.docx"); XWPFTemplate template = XWPFTemplate.compile(file).render( new HashMap(){{ //生成數(shù)據(jù) put("demand", ydgdTemplete.getDemand()); //生成列表數(shù)據(jù) put("detailList", new NumbericRenderData(new ArrayList () { { if(null!=ydgdTemplete.getDetailList() && ydgdTemplete.getDetailList().size()>0){ for(String detail:ydgdTemplete.getDetailList()){ add(new TextRenderData(detail)); } } } })); }}); FileOutputStream out = new FileOutputStream(docPath); template.write(out); out.flush(); out.close(); template.close(); return true; } catch (Exception e) { e.printStackTrace(); return false; } }
關(guān)于怎么使用poi-tl操作word模板問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。