| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
c6g3
10年前发布

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