1. 程式人生 > >java對word文件的操作

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);
}
“`