java操作word,自动填写word表格
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                java操作word,自动填写word表格
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                工作中常要填寫各種word表格,其中內容有很多是重復的。于是想做一個工具,輸入word文件所對應的xml格式文件,自動填寫表格。
word其實可以轉化成xml來處理,這一步可以手工用word把.doc格式文件另存為.xml格式。word的表格中,每一行對應一個<w:tr>標簽;每一個格子對應一個<w:tc>標簽;格子中每行的內容,對應一個<w:t>標簽。
對于xml的處理,可以用dom4j來處理。主要思路為:
1.將所要自動填寫的內容,按key? -- value的格式,寫進一個properties文件中。并通過程序將文件內容取出,放入到entityList當中。
2.從xml根節點開始,遍歷所有節點。若當前為w:tc節點,則獲取該節點下所有w:t的內容,與所有entityList中所有key值對比。若有匹配,則在下一個w:tc格子中,新加一個w:t把該key值對應的value填入該表格中。
3.生成新的xml格式文件
?
所有代碼如下:
1.xml處理相關函數:
package com.XML.test;import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.xml.soap.Node;import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; public class Demo01 { @Test public void test() throws Exception { // 創建saxReader對象 SAXReader reader = new SAXReader(); // 通過read方法讀取一個文件 轉換成Document對象 Document document = reader.read(new File("./src/倪銳個人簡歷表格.xml")); //獲取根節點元素對象 Element node = document.getRootElement(); //遍歷所有的元素節點List<Entity> entityList= GetPro.GetEntityList();int i=0;for(Entity a:entityList){System.out.println("Entity" +i +a.getKey()+" "+a.getValue()); i++;}listNodes(node,entityList); // 寫入到一個新的文件中 writer(document); } /** * 把document對象寫入新的文件 * * @param document * @throws Exception */ public void writer(Document document) throws Exception { // 緊湊的格式 // OutputFormat format = OutputFormat.createCompactFormat(); // 排版縮進的格式 OutputFormat format = OutputFormat.createPrettyPrint(); // 設置編碼 format.setEncoding("UTF-8"); // 創建XMLWriter對象,指定了寫出文件及編碼格式 // XMLWriter writer = new XMLWriter(new FileWriter(new // File("src//a.xml")),format); XMLWriter writer = new XMLWriter(new OutputStreamWriter( new FileOutputStream(new File("src//a.xml")), "UTF-8"), format); // 寫入 writer.write(document); // 立即寫入 writer.flush(); // 關閉操作 writer.close(); } /** * 遍歷當前節點元素下面的所有(元素的)子節點 * * @param node */ public void listNodes(Element node,List<Entity> fillList) { System.out.println("當前節點的名稱::" + node.getName()); // 獲取當前節點的所有屬性節點 List<Attribute> list = node.attributes(); // 遍歷屬性節點 for (Attribute attr : list) { System.out.println(attr.getText() + "-----" + attr.getName() + "---" + attr.getValue()); } if (!(node.getTextTrim().equals(""))) { System.out.println("文本內容::::" + node.getText()); }if (node.getName().equals("tc")){System.out.println("----------------enter tc------------------");for(Entity ent:fillList){rightFil(node,ent.getKey(),ent.getValue());} }// 當前節點下面子節點迭代器 Iterator<Element> it = node.elementIterator(); // 遍歷 while (it.hasNext()) { // 獲取某個子節點對象 Element e = it.next(); // 對子節點進行遍歷 listNodes(e,fillList); } } //node is where you find key valuepublic String merge(Element node,String tag,String ini){StringBuffer strMerg=new StringBuffer(ini);Iterator<Element> it = node.elementIterator(); if(node.getName().equals(tag)){strMerg.append(node.getText()); // System.out.println("for strMerg-----" + strMerg); // System.out.println("for node.getText()=" + node.getText());}while (it.hasNext()) { // 獲取某個子節點對象 Element e = it.next(); // 對子節點進行遍歷 strMerg=new StringBuffer(merge(e,tag,strMerg.toString())); } // System.err.println("strMerg=" + strMerg);return strMerg.toString().replace(" ", "");}public String mergebackup(Element node,String tag){try{List<Element> sibList=node.elements("p");System.err.println("size=-----" + sibList.size());StringBuffer strMerg=new StringBuffer("");int i=0;for (Element elm : sibList) { System.out.println("sibList-----" + elm.element("r").element("t").getText());strMerg.append(elm.element("r").element("t").getText());System.out.println("for strMerg =" + strMerg);i++;System.err.println("i======" + i);} // System.out.println("strMerg-----" + strMerg);System.out.println("strMerg del blanks-----" + strMerg.toString().replace(" ", ""));return strMerg.toString().replace(" ", "");}catch(NullPointerException e){System.out.println("merge: no t in this tc -----" );return "";}}public void rightFil(Element node,String key,String value){//node 為tc級別,合并所有t標簽String strMerg=merge(node,"t","");if(strMerg.equals(key)&&strMerg.length()>0){System.out.println("***********************"+key+"found");System.out.println(node.getName());//int j=node.indexOf(node.getParent());Element father=node;//self tc tagSystem.out.println(father.getName());Element sib=(Element) father.selectSingleNode("following-sibling::w:tc[1]");//next tc tagif(sib!= null){insertT(sib,value);}else{}}}public void rightFilBackup(Element node,String key,String value){//node 為t級別,不能合并所有t標簽if(node.getText().replace(" ", "").equals(key)){System.out.println("***********************"+key+"found");System.out.println(node.getName());//int j=node.indexOf(node.getParent());Element father=(Element) node.getParent().getParent().getParent();//self tc tagSystem.out.println(father.getName());Element sib=(Element) father.selectSingleNode("following-sibling::w:tc[1]");//next tc taginsertT(sib,value);}} public void insertT(Element tc,String value){List<Attribute> list = tc.attributes(); // 遍歷屬性節點 for (Attribute attr : list) { System.out.println(attr.getText() + "-----" + attr.getName() + "---" + attr.getValue()); } System.out.println("tc.attribute(\"id\")========");System.out.println(tc.attribute("id")); Element adE=tc.element("p");System.out.println("adEtest++++++++++++====="+adE.getName()); System.out.println("adEtest++++++++++++=====END"+adE.getName()); Element r=adE.addElement("w:r"); Element rPr=r.addElement("w:rPr");rPr.addElement("w:rFonts hint=\"eastAsia\"");rPr.addElement("w:sz val=\"24\"");Element t=r.addElement("w:t");t.setText(value);}/** * 介紹Element中的element方法和elements方法的使用 * * @param node */ public void elementMethod(Element node) { // 獲取node節點中,子節點的元素名稱為西游記的元素節點。 Element e = node.element("西游記"); // 獲取西游記元素節點中,子節點為作者的元素節點(可以看到只能獲取第一個作者元素節點) Element author = e.element("作者"); System.out.println(e.getName() + "----" + author.getText()); // 獲取西游記這個元素節點 中,所有子節點名稱為作者元素的節點 。 List<Element> authors = e.elements("作者"); for (Element aut : authors) { System.out.println(aut.getText()); } // 獲取西游記這個元素節點 所有元素的子節點。 List<Element> elements = e.elements(); for (Element el : elements) { System.out.println(el.getText()); } } }2.自動填寫格式設定:(key姓名--value張三)?
package com.XML.test;public class Entity {String key;String value;public String getKey() {return key;}public void setKey(String key) {this.key = key;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}}3.從properties文件讀出到entityList程序?
package com.XML.test;import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Properties;import org.dom4j.DocumentException;//關于Properties類常用的操作 public class GetPro {//讀取Properties的全部信息public static List GetEntityList() throws IOException {List<Entity> entityList= new ArrayList();Properties pps = new Properties();InputStream in = new BufferedInputStream(new FileInputStream("./src/com/XML/test/properties"));pps.load(new InputStreamReader( in, "utf-8"));Enumeration en = pps.propertyNames(); //得到配置文件的名字while(en.hasMoreElements()) {String strKey = (String) en.nextElement();String strValue = pps.getProperty(strKey);Entity entity =new Entity();entity.setKey(strKey);entity.setValue(strValue);entityList.add(entity);System.out.println(strKey + "=" + strValue);}return entityList;}public static void main(String[] args) throws DocumentException,IOException {Entity entity_1 =new Entity();List<Entity> entityList_1=GetEntityList();for(int i=0;i<entityList_1.size();i++){entity_1=entityList_1.get(i);System.out.println(entity_1.getKey() + "=" + entity_1.getValue());} }}4.propeties文件?
#Update long name #Sat Sep 22 00:57:39 CST 2018 姓名=牛逼 性別=女 出身年月=1987年7月 身份證號碼=518209387428982347 民族=汗 政治面貌=中共黨員 婚姻狀況=已婚 健康狀況=良好 身高=175 現戶口所在地=北京 所學專業=英語 學歷=本科 最后畢業學校=清華大學 畢業時間=2017年8月 技術職稱=高級工程師 現工作單位=百度 參加工作時間=2017年10月 現從事專業=搬磚?
總結
以上是生活随笔為你收集整理的java操作word,自动填写word表格的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 新浪微博爬虫分享(2016年12月01日
- 下一篇: 高级JavaScript第(五)篇
