2016-04-13 29 views
-1

Belirli bir yer tutucu için arama yapmak ve JAVA ile Apache poi'yi kullanarak sözcük şablonu içindeki metin ile değiştirmek istiyorum, tüm tablolara, satırlara, hücrelere döngü yapmama ve içindeki her metni arayın.Apache POI - Word belgesi içinde yer tutucu ara

+1

Bazı örnek verileri ve kodunuzu ekler misiniz? PS: Bence tekrarlanan düşünce hücrelerinden daha kolay bir çözüm yoktur. DÜZENLEME: (bu soru) (http://stackoverflow.com/questions/3618763/find-excel-cell-by-text-in-apache-poi) (XWPFTable tbl: doc) için – edasssus

+0

yardımcı olabilir. getTables()) {için (XWPFTableRow sıra: tbl.getRows()) {için \t (XWPFTableCell hücre: row.getTableCells()) için { \t \t (XWPFParagraph p: cell.getParagraphs()) { \t \t için (XWPFRun r: p.getRuns()) { \t \t Dize metni = r.getText (0); \t \t if (metin! = Null && (text.equalsIgnoreCase ("$ comment"))) Cevabınız için –

cevap

2

Şu anda benzer bir şey yapan projemize bir bakış https://github.com/centic9/poi-mail-merge.

Temel olarak word belgesinin XML temsilini alır, değiştirir ve sonucu belgeye geri koyar.

I.I.I.e. yedek birden formatings, örneğin genelinde bölünür eğer

CTBody body = doc.getDocument().getBody(); 

    XmlOptions optionsOuter = new XmlOptions(); 
    optionsOuter.setSaveOuter(); 

    // read the current full Body text 
    String srcString = body.xmlText(); 

    ... do the replacements in srcString 

    XmlOptions optionsOuter = new XmlOptions(); 
    optionsOuter.setSaveOuter(); 
    String srcString = src.xmlText(); 
    String prefix = srcString.substring(0,srcString.indexOf(">")+1); 

    final String mainPart; 
    // exclude template itself in first appending 
    if(first) { 
     mainPart = ""; 
    } else { 
     mainPart = srcString.substring(srcString.indexOf(">")+1,srcString.lastIndexOf("<")); 
    } 

    String sufix = srcString.substring(srcString.lastIndexOf("<")); 
    String addPart = append.substring(append.indexOf(">") + 1, append.lastIndexOf("<")); 
    CTBody makeBody = CTBody.Factory.parse(prefix+mainPart+addPart+sufix); 
    src.set(makeBody); 

Not gibi bir şey uygulaması karıştı olduğunu İkame etiketinin bir kısmı kalınsa, bu işleyiş biçiminde içseldir.

+0

sayesinde yardımcı oldu}}}} { // do something} ancak kaldırmak için herhangi bir tekniğe sahip Belgedeki belirli tablo (bölüm), $ yer tutucu olduğunu biliyor. –