java 使用POI 读写word 表格详解编程语言

POI是apache的开源项目,其地址在http://poi.apache.org/

下面是起官方网站的标题,POI是微软文档的javaAPI

Apache POI – the Java API for Microsoft Documents。

下面是一个POI读写word表格的例子:

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Set; 
 
import org.apache.poi.hwpf.HWPFDocument; 
import org.apache.poi.hwpf.usermodel.Paragraph; 
import org.apache.poi.hwpf.usermodel.Range; 
import org.apache.poi.hwpf.usermodel.Table; 
import org.apache.poi.hwpf.usermodel.TableCell; 
import org.apache.poi.hwpf.usermodel.TableIterator; 
import org.apache.poi.hwpf.usermodel.TableRow; 
 
public class POIWordUtil { 
 
    public static void main(String[] args) throws Exception { 
        Map<String, Text> replaces = new HashMap<String, Text>(); 
 
        replaces.put("${username}", Text.str("rongzhi_li")); 
        replaces.put("${password}", Text.str("1123456")); 
        replaces.put("${author}", Text.str("lee")); 
 
        poiWordTableReplace("t1.doc", "t2.doc", replaces); 
    } 
 
    public static void poiWordTableReplace(String sourceFile, String newFile, 
            Map<String, Text> replaces) throws Exception { 
        FileInputStream in = new FileInputStream(sourceFile); 
        HWPFDocument hwpf = new HWPFDocument(in); 
        Range range = hwpf.getRange();// 得到文档的读取范围 
        TableIterator it = new TableIterator(range); 
        // 迭代文档中的表格 
        while (it.hasNext()) { 
            Table tb = (Table) it.next(); 
            // 迭代行,默认从0开始 
            for (int i = 0; i < tb.numRows(); i++) { 
                TableRow tr = tb.getRow(i); 
                // 迭代列,默认从0开始 
                for (int j = 0; j < tr.numCells(); j++) { 
                    TableCell td = tr.getCell(j);// 取得单元格 
                    // 取得单元格的内容 
                    for (int k = 0; k < td.numParagraphs(); k++) { 
                        Paragraph para = td.getParagraph(k); 
 
                        String s = para.text(); 
                        final String old = s; 
                        for (String key : replaces.keySet()) { 
                            if (s.contains(key)) { 
                                s = s.replace(key, replaces.get(key).getText()); 
                            } 
                        } 
                        if (!old.equals(s)) {// 有变化 
                            para.replaceText(old, s); 
                            s = para.text(); 
                            System.out.println("old:" + old + "->" + "s:" + s); 
                        } 
 
                    } // end for 
                } // end for 
            } // end for 
        } // end while 
 
        FileOutputStream out = new FileOutputStream(newFile); 
        hwpf.write(out); 
 
        out.flush(); 
        out.close(); 
 
    } 
} 
public abstract class Text { 
 
    public abstract String getText(); 
 
    public static Text str(final String string) { 
        return new Text() { 
            @Override 
            public String getText() { 
                return string; 
            } 
        }; 
    } 
 
}

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/11002.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论