1. 程式人生 > 其它 >poi 4.11版本 word模板操作

poi 4.11版本 word模板操作

寫程式碼之前先說說遇到的問題,之前word模板是使用poi 3.9的包實現的,之後又寫了exlce上傳下載的功能使用的是poi 4.11的版本,他們之間融合的時候發現包衝突,總有一個功能不能使用,之後發現poi 4 之後把一些poi 3支援的方法直接放棄了,導致之前好用的功能不好用。為了看poi4.11版本如何操作word模板網上找了很多資料沒有一個可以直接拿來用的,後來又通過各種除錯修改終於搞成了。

操作word模板文字和表格還不是一個方法,新版本設定個字型都挺費勁,網上可用的資料太少了。廢話不說了直接上程式碼

一、pom.xnl

依賴的核心包

        <dependency
> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId
>poi-ooxml</artifactId> <version>4.1.1</version> </dependency>

二、程式碼

public class WordDoUtil {

    public static void main(String[] args) {

        System.out.println("path:"+System.getProperty("user.dir").toString());

        Map map=new HashMap();
        map.put(
"${name}","張三"); map.put("${num}","123456"); map.put("${agree}","■"); map.put("${refuse}","□"); map.put("${ha}","11111"); getBuild("doc/在校證明.doc",map,"D:/在校證明1.doc"); } public static void getBuild(String tmpFile, Map<String, String> map, String exportFile){ XWPFDocument document = null; try { document = new XWPFDocument( POIXMLDocument.openPackage(System.getProperty("user.dir").toString()+"\\"+tmpFile)); } catch (IOException e) { e.printStackTrace(); } // 替換段落中的指定文字 Iterator<XWPFParagraph> itPara = document.getParagraphsIterator(); while (itPara.hasNext()) { XWPFParagraph paragraph = (XWPFParagraph) itPara.next(); String s = paragraph.getParagraphText(); System.out.println("s:"+s); Set<String> set = map.keySet(); Iterator<String> iterator = set.iterator(); while (iterator.hasNext()) { String key = iterator.next(); List<XWPFRun> run=paragraph.getRuns(); for(int i=0;i<run.size();i++) { if(run.get(i).getText(run.get(i).getTextPosition())!=null && run.get(i).getText(run.get(i).getTextPosition()).equals(key)) { /**引數0表示生成的文字是要從哪一個地方開始放置,設定文字從位置0開始 * 就可以把原來的文字全部替換掉了 * */ run.get(i).setText(map.get(key),0); } } } } // 替換表格中的指定文字 Iterator<XWPFTable> itTable = document.getTablesIterator(); while (itTable.hasNext()) { XWPFTable table = (XWPFTable) itTable.next(); int rcount = table.getNumberOfRows(); for (int i = 0; i < rcount; i++) { XWPFTableRow row = table.getRow(i); List<XWPFTableCell> cells = row.getTableCells(); for (XWPFTableCell cell : cells) { String tempText = cell.getText(); int have = 0; for (Map.Entry<String, String> e : map.entrySet()) { if (tempText.contains(e.getKey())) { have =1; tempText = tempText.replace(e.getKey(),e.getValue()); } } if(have ==1) { cell.removeParagraph(0); //------------設定字型式樣----- XWPFParagraph pIO =cell.addParagraph(); XWPFRun rIO = pIO.createRun(); rIO.setFontFamily("楷體"); rIO.setFontSize(9); rIO.setText(tempText); //這樣寫格式沒用 // cell.setText(tempText); } } } } FileOutputStream outStream = null; try { outStream = new FileOutputStream(exportFile); document.write(outStream); outStream.close(); } catch (Exception e) { e.printStackTrace(); } } }