1. 程式人生 > >WORD匯出

WORD匯出

  1. public class HwpfTest {    
  2.       
  3.    @Test    
  4.    public void testWrite() throws Exception {    
  5.       String templatePath = "D:\\word\\template.doc"
    ;    
  6.       InputStream is = new FileInputStream(templatePath);    
  7.       HWPFDocument doc = new HWPFDocument(is);    
  8.       Range range = doc.getRange();    
  9.       //把range範圍內的${reportDate}替換為當前的日期    
  10.       range.replaceText("${reportDate}"new SimpleDateFormat("yyyy-MM-dd").format(new Date()));    
  11.       range.replaceText("${appleAmt}"
    "100.00");    
  12.       range.replaceText("${bananaAmt}""200.00");    
  13.       range.replaceText("${totalAmt}""300.00");    
  14.       OutputStream os = new FileOutputStream("D:\\word\\write.doc");    
  15.       //把doc輸出到輸出流中    
  16.       doc.write(os);    
  17.       this.closeStream(os);    
  18.       this.closeStream(is);    
  19. //瀏覽器匯出
  20.   response.reset();
                response.setContentType("application/msword; charset=UTF-8");
    //            response.setCharacterEncoding ("utf-8");//設定編碼集,檔名不會發生中文亂碼
                response.setHeader("Content-Disposition", "Attachment;filename= "
                                + new String((adYear+"年"+adMonth+"月計劃.doc").toString().getBytes(
                                //"UTF-8"),"UTF-8"));
                                "gb2312"), "ISO8859_1"));
                OutputStream  outstream= null;
                try {
                    outstream = response.getOutputStream();
                    document.write(outstream);
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    try {
                        if(tempFileInputStream!=null){
                            outstream.close();
                        }
                        if(outstream!=null){
                            outstream.close();
                        }
                    }catch (Exception io){
                        io.printStackTrace();
                    }
                }

  21.    }    
  22.       
  23.    /**  
  24.     * 關閉輸入流  
  25.     * @param is  
  26.     */    
  27.    private void closeStream(InputStream is) {    
  28.       if (is != null) {    
  29.          try {    
  30.             is.close();    
  31.          } catch (IOException e) {    
  32.             e.printStackTrace();    
  33.          }    
  34.       }    
  35.    }    
  36.      
  37.    /**  
  38.     * 關閉輸出流  
  39.     * @param os  
  40.     */    
  41.    private void closeStream(OutputStream os) {    
  42.       if (os != null) {    
  43.          try {    
  44.             os.close();    
  45.          } catch (IOException e) {    
  46.             e.printStackTrace();    
  47.          }    
  48.       }    
  49.    }    
  50.       
  51.      
  52. }   


1.2     例項2

需要的jar包:poi-3.10.1.jar;poi-ooxml-3.10.1.jar;poi-ooxml-schemas-3.10.1.jar;poi-scratchpad-3.10.1.jar
* POI方式匯出word文件,需要提前建立word匯出模板
* POI方式匯出word時,本機安裝的office版本是2007以前的版本,使用到的是HWPFDocument
* POI方式匯出word時,本機安裝的office版本是2007+的版本,使用到的是XWPFDocument

[java]  view plain  copy
  1. package officeWordDoc;  
  2. import java.io.FileInputStream;  
  3. import java.net.URLEncoder;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6.   
  7. import javax.faces.context.FacesContext;  
  8. import javax.servlet.ServletOutputStream;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import org.apache.poi.hwpf.HWPFDocument;  
  13. import org.apache.poi.hwpf.usermodel.Range;  
  14.   
  15.   
  16. /** 
  17. * @ClassName:WordDocDemo_POI 
  18. * @Description:使用POI方式實現word文件匯出功能 
  19. *               需要的jar包:poi-3.10.1.jar;poi-ooxml-3.10.1.jar; 
  20. *               poi-ooxml-schemas-3.10.1.jar;poi-scratchpad-3.10.1.jar 
  21. *               POI方式匯出word文件,需要提前建立word匯出模板 
  22. *               POI方式匯出word時,本機安裝的office版本是2007以前的版本,使用到的是HWPFDocument 
  23. *               POI方式匯出word時,本機安裝的office版本是2007+的版本,使用到的是XWPFDocument 
  24. * @date:2017年5月12日 
  25. * 修改備註: 
  26. */  
  27. public class WordDocDemo_POI{  
  28.       
  29.     public static void main(String[] args){  
  30.         WordDocDemo_POI poi = new WordDocDemo_POI();  
  31.         poi.exportWord();  
  32.     }  
  33.   
  34.     /**  
  35.     * @Description:使用POI實現word匯出功能,JSF頁面請求,此處涉及到JSF框架中FacesContext物件,可摘除, 
  36.     * @date: 2017年5月12日 下午6:50:51 
  37.     * @修改備註:  
  38.     */  
  39.     public void exportWord() {  
  40.         FacesContext context = FacesContext.getCurrentInstance();  
  41.         context.responseComplete();  
  42.         HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();  
  43.         HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();  
  44.         response.reset();  
  45.         try {  
  46.             String fileName = "關於"+"eventInfo.getEventName()"+"的情況報告.doc";  
  47.             fileName = URLEncoder.encode(fileName, "UTF-8");  
  48.             response.setHeader("Content-disposition""attachment;filename="+fileName);  
  49.             response.setContentType("application/msword");  
  50.             ServletOutputStream outputStream = response.getOutputStream();  
  51.             //引入word模板,轉化成流  
  52.             //String wordTemp = "E:\\專案\\匯出報告模板\\reportTemplate.doc";  
  53.             String wordTemp = request.getSession().getServletContext().getRealPath("eventInfo.export.reportTemplate");  
  54.             FileInputStream inputStream = new FileInputStream(wordTemp);  
  55.             HWPFDocument document = new HWPFDocument(inputStream);  
  56.             //替換內容  
  57.             Range range = document.getRange();  
  58.             Map<String, String> content = this.getReplaceContent();  
  59.             for(java.util.Map.Entry<String, String> entry : content.entrySet()){  
  60.                 range.replaceText(entry.getKey(), entry.getValue());  
  61.             }  
  62.             document.write(outputStream);  
  63.             inputStream.close();  
  64.             outputStream.flush();  
  65.             outputStream.close();  
  66.         } catch (Exception e) {  
  67.             e.printStackTrace();  
  68.         }  
  69.         FacesContext.getCurrentInstance().responseComplete();  
  70.     }  
  71.       
  72.     /** 
  73.      * 獲取模板中需要替換的文字 
  74.      * @param report 
  75.      * @return 
  76.      */  
  77.     private Map<String, String> getReplaceContent(){  
  78.         Map<String, String> content = new HashMap<String, String>();  
  79.         content.put("${eventType}""typeName型別名稱");  
  80.         content.put("${reportName}""report.getReportName報告名稱");  
  81.         content.put("${reporterUnit}""report.getReporterUnit報送單位");  
  82.         content.put("${loginUser}""loginUser登入人員資訊");  
  83.         content.put("${nowTime}""yyyy年MM月dd日時間訊息");  
  84.         content.put("${occurTime}""yyyy年MM月dd日事發時間");  
  85.         content.put("${disaster}""非必填寫1");  
  86.         content.put("${eventDesc}""非必填寫2");  
  87.         content.put("${eventDesc}""非必填寫3");  
  88.         return content;  
  89.     }  
  90.   

  1. }  

https://blog.csdn.net/QQ578473688/article/details/72082085?locationNum=15&fps=1