您好,登錄后才能下訂單哦!
怎么使用poi-tl操作word模板,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
<!-- poi-tl jar --> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.8.2</version> </dependency>
在電腦E盤中建立word模板:“E:\templete.docx”
修改模板內容
標題:{{title}} 工單編號:{{workNo}} 發單日期:{{issueDate}} 列表數據:{{*list}}
/** * 根據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<String, Object>() {{ put("title", "Hi, poi-tl Word模板引擎"); put("workNo", "20200910-001"); put("issueDate", "2020年9月10日"); put("list", new NumbericRenderData(new ArrayList<TextRenderData>() { { //循環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 List<String> detailList;//列表數據 }
/** * 根據word模板生成數據信息,返回文檔訪問地址 * @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();// 創建文件夾 } //生成word文檔名稱 String fileName = System.currentTimeMillis() + ".docx"; //保存的文件的路徑信息 String docPath = realPath + fileDir + fileName; //返回文檔路徑 String backPath= fileDir + fileName; //封裝數據 YdgdTemplete ydgdTemplete = new YdgdTemplete(); ydgdTemplete.setDemand("生成測試數據"); List<String> list = new ArrayList<>(); list.add("第1條記錄"); list.add("第2條記錄"); ydgdTemplete.setDetailList(list); //根據模板生成word文檔 Boolean falg = FileUtil.createdoc(docPath,ydgdTemplete); //調用返回 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; } }
/** * 根據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<String, Object>(){{ //生成數據 put("demand", ydgdTemplete.getDemand()); //生成列表數據 put("detailList", new NumbericRenderData(new ArrayList<TextRenderData>() { { 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; } }
關于怎么使用poi-tl操作word模板問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。