首页 > 开发 > Java > 正文

springMVC导出word模板的方法

2024-07-13 10:09:34
字体:
来源:转载
供稿:网友

本文实例为大家分享了springMVC导出word模板的具体代码,供大家参考,具体内容如下

controller 调用

@RequestMapping(value = "/exportWord")public void exportWord(HttpServletResponse response, HttpServletRequest request) throws IOException {  String templatePath = request.getServletContext().getRealPath("") + "/template/税源信息比对.docx";   String fileName = new String("税源信息比对".getBytes("gb2312"), "ISO8859-1") + ".docx";  /*数据*/  Map<String, Object> params = new HashMap<String, Object>();   params.put("${name}", "aaaa");   params.put("${sex}", "bbbb");  TempleWordUtil wordUtil = new TempleWordUtil();  XWPFDocument doc;   InputStream is = new FileInputStream(templatePath); // is = getClass().getClassLoader().getResourceAsStream(templatePath);   doc = new XWPFDocument(is);  //只能使用.docx的  wordUtil.replaceInPara(doc, params);   //替换表格里面的变量   wordUtil.replaceInTable(doc, params);   OutputStream os = response.getOutputStream();   response.setContentType("application/vnd.ms-excel");   response.setHeader("Content-disposition", "attachment;filename=" + fileName);   doc.write(os);   wordUtil.close(os);   wordUtil.close(is);   os.flush();   os.close(); }

TempleWordUtil 工具类

import org.apache.poi.xwpf.usermodel.*;   import java.io.*; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern;  /** * 写入word工具类 * @author z * */public class TempleWordUtil {   /**    * 替换段落里面的变量    *    * @param doc  要替换的文档    * @param params 参数,导入的数据    */   public void replaceInPara(XWPFDocument doc, Map<String, Object> params) {     Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator();     XWPFParagraph para;     while (iterator.hasNext()) {       para = iterator.next();       this.replaceInPara(para, params);     }   }     /**    * 替换段落里面的变量    *    * @param para  要替换的段落    * @param params 参数    */   public void replaceInPara(XWPFParagraph para, Map<String, Object> params) {     List<XWPFRun> runs;     //Matcher matcher;     if (this.matcher(para.getParagraphText()).find()) {       runs = para.getRuns();         int start = -1;       int end = -1;       String str = "";       for (int i = 0; i < runs.size(); i++) {         XWPFRun run = runs.get(i);         String runText = run.toString();         if ('$' == runText.charAt(0)&&'{' == runText.charAt(1)) {           start = i;         }         if ((start != -1)) {           str += runText;         }         if ('}' == runText.charAt(runText.length() - 1)) {           if (start != -1) {             end = i;             break;           }         }       }         for (int i = start; i <= end; i++) {         para.removeRun(i);         i--;         end--;       }         for (String key : params.keySet()) {         if (str.equals(key)) {           para.createRun().setText((String) params.get(key));           break;         }       }         }   }     /**    * 替换表格里面的变量    *    * @param doc  要替换的文档    * @param params 参数    */   public void replaceInTable(XWPFDocument doc, Map<String, Object> params) {     Iterator<XWPFTable> iterator = doc.getTablesIterator();     XWPFTable table;     List<XWPFTableRow> rows;     List<XWPFTableCell> cells;     List<XWPFParagraph> paras;     while (iterator.hasNext()) {       table = iterator.next();       rows = table.getRows();       for (XWPFTableRow row : rows) {         cells = row.getTableCells();         for (XWPFTableCell cell : cells) {           paras = cell.getParagraphs();           for (XWPFParagraph para : paras) {             this.replaceInPara(para, params);           }         }       }     }   }     /**    * 正则匹配字符串    *    * @param str    * @return    */   private Matcher matcher(String str) {     Pattern pattern = Pattern.compile("//$//{(.+?)//}", Pattern.CASE_INSENSITIVE);     Matcher matcher = pattern.matcher(str);     return matcher;   }     /**    * 关闭输入流    *    * @param is    */   public void close(InputStream is) {     if (is != null) {       try {         is.close();       } catch (IOException e) {         e.printStackTrace();       }     }   }     /**    * 关闭输出流    *    * @param os    */   public void close(OutputStream os) {     if (os != null) {       try {         os.close();       } catch (IOException e) {         e.printStackTrace();       }     }   }   }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表