java對word文件的操作
springmvc controller層
類在org.apache.poi.xwpf包下
POI在讀寫word docx檔案時是通過xwpf模組來進行的,其核心是XWPFDocument。一個XWPFDocument代表一個docx文件,其可以用來讀docx文件,也可以用來寫docx文件。XWPFDocument中主要包含下面這幾種物件:
XWPFParagraph:代表一個段落。
XWPFRun:代表具有相同屬性的一段文字。
XWPFTable:代表一個表格。
XWPFTableRow:表格的一行。
XWPFTableCell:表格對應的一個單元格。
重點介紹寫文件,比較靈活,但有點麻煩,也可以通過模板來讀之後進行替換。
注意物件的獲取與方法的呼叫
“`
@RequestMapping(value=”/export”,method = {RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public void doWord(HttpServletResponse response){
//建立文件物件
XWPFDocument xdoc = new XWPFDocument();
//設定頁首(自己封裝的方法)
simpleDateHeader(xdoc);
//建立段落
XWPFParagraph titleMes1 = xdoc.createParagraph();
//設定段落居中(段落格式利用段落物件呼叫方法來設定,比如居中,縮排,段落是否站一整頁等。)
titleMes1.setAlignment(ParagraphAlignment.CENTER);
//在這個段落之後追加一段相同屬性的段落(文字格式通過文字物件呼叫方法來設定,比如字型顏色,大小等。)
XWPFRun r1 = titleMes1.createRun();
String s1=”hello world”;
r1.setText(s1);
r1.setFontFamily(“微軟雅黑”);
r1.addBreak();
int columns = 5; int rows = 8;//行數 //建立表格物件(一個8行5列的表格) XWPFTable xTable = xdoc.createTable(rows, columns); //得到Table的CTTblPr,不存在則新建 CTTbl ttbl = xTable.getCTTbl(); //表格屬性 CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr(); //設定表格寬度 CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW(); tblWidth.setW(new BigInteger("9600")); //獲取表格第一行(從0開始) XWPFTableRow row = null; row = xTable.getRow(0); //設定行高 row.setHeight(100); //獲取表格的單元格(第一行的第一個,從0開始) XWPFTableCell cell = null; cell = row.getCell(0); //設定內容(也可以使用cell.setParagraph(XWPFParagraph p),單元格里新增一個段落,更易於設定樣式) cell.setText("內容") ServletOutputStream out = null; try { String filename = new String("report.doc".getBytes(),"utf-8"); response.setHeader("Content-Type","application/msword"); response.setHeader("Content-Disposition", "attachment; filename=" + filename); out = response.getOutputStream(); xdoc.write(out); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); out.close(); }
}
//自己寫的設定頁首函式
//(通過傳文件物件來建立實現,你只需要設定頁首的內容,格式,樣式,利用r1物件來設定,可建立多個XWPFRun物件)
public void simpleDateHeader(XWPFDocument document) throws Exception {
CTP ctp = CTP.Factory.newInstance();
XWPFParagraph codePara = new XWPFParagraph(ctp, document);
codePara.setAlignment(ParagraphAlignment.RIGHT);
XWPFRun r1 = codePara.createRun();
r1.setText(“這裡是頁首”);
codePara.setBorderBottom(Borders.THICK);
XWPFParagraph[] newparagraphs = new XWPFParagraph[1];
newparagraphs[0] = codePara;
CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(
document, sectPr);
headerFooterPolicy.createHeader(STHdrFtr.DEFAULT, newparagraphs);
}
“`