java 讀寫word java 動態寫入 模板文件


import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.FieldsDocumentPart;
import org.apache.poi.hwpf.usermodel.Field;
import org.apache.poi.hwpf.usermodel.Fields;
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;


/**
 * @author zhangchaochao
 * @date 2015-12-4上午10:30:59
 */
public class MSWordPoi4  
{  
      
    /** 
    * @param args 
    */  
    public static void main(String[] args)  
    {  
        Map<String, String> map = new HashMap<String, String>();  
        map.put("${sub}", "湖南大學");  
        map.put("${item2.school}", "湖南大學");  
        map.put("${item2.address}", "湖南");  
//        map.put("${item1.name}", "王五1");  
//        map.put("${item1.numberStudent}", "編號002");  
//        map.put("${item1.sex}", "男2");  
//        map.put("${item1.age}", "19");  
        String srcPath = "D:\\鑄造工藝卡.doc";  
        readwriteWord(srcPath, map);  
    }  
      
    /** 
    * 實現對word讀取和修改操作 
    *  
    * @param filePath 
    *            word模板路徑和名稱 
    * @param map 
    *            待填充的數據,從數據庫讀取 
    */  
    public static void readwriteWord(String filePath, Map<String, String> map)  
    {  
        // 讀取word模板  
        // String fileDir = new  
        // File(base.getFile(),"http://www.cnblogs.com/http://www.cnblogs.com/../doc/").getCanonicalPath();  
        FileInputStream in = null;  
        try  
        {  
            in = new FileInputStream(new File(filePath));  
        }  
        catch (FileNotFoundException e1)  
        {  
            e1.printStackTrace();  
        }  
        HWPFDocument hdt = null;  
        try  
        {  
            hdt = new HWPFDocument(in);  
        }  
        catch (IOException e1)  
        {  
            e1.printStackTrace();  
        }  
        Fields fields = hdt.getFields();  
        Iterator<Field> it = fields.getFields(FieldsDocumentPart.MAIN)  
                .iterator();  
        while (it.hasNext())  
        {  
            System.out.println(it.next().getType());  
        }  
          
        //讀取word文本內容  
        Range range = hdt.getRange();  
        TableIterator tableIt = new TableIterator(range);   
        //迭代文檔中的表格  
        int ii = 0;  
        while (tableIt.hasNext()) {    
            Table tb = (Table) tableIt.next();    
            ii++;  
            System.out.println(""+ii+"個表格數據...................");  
            //迭代行,默認從0開始  
            for (int i = 0; i < tb.numRows(); i++) {    
                TableRow tr = tb.getRow(i);    
                //只讀前8行,標題部分  
                if(i >=8) break;  
                //迭代列,默認從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();    
                        System.out.println(s);  
                    } //end for     
                }   //end for  
            }   //end for  
        } //end while  
        //System.out.println(range.text());  
          
        // 替換文本內容  
        for (Map.Entry<String, String> entry : map.entrySet())  
        {  
            range.replaceText(entry.getKey(), entry.getValue());  
        }  
        ByteArrayOutputStream ostream = new ByteArrayOutputStream();  
        String fileName = "" + System.currentTimeMillis();  
        fileName += ".doc";  
        FileOutputStream out = null;  
        try  
        {  
            out = new FileOutputStream("D:/" + fileName, true);  
        }  
        catch (FileNotFoundException e)  
        {  
            e.printStackTrace();  
        }  
        try  
        {  
            hdt.write(ostream);  
        }  
        catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
        // 輸出字節流  
        try  
        {  
            out.write(ostream.toByteArray());  
        }  
        catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
        try  
        {  
            out.close();  
        }  
        catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
        try  
        {  
            ostream.close();  
        }  
        catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
    }  
} 

java 讀寫word java 動態寫入 模板文件下載地址 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM