java 使用POI 讀寫word 表格

c6g3 9年前發布 | 6K 次閱讀 Java POI

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;
        }
    };
}

}</pre>

 本文由用戶 c6g3 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!