2013-03-01 12 views
6

Wie diese Tabelle automatisch an die Dokumentseitenbreite angepasst wird, wenn die Spaltengröße zunimmt, verwenden Sie Apache-Poi und richten Sie diese Tabelle auf die Mitte aus.Wie passen Sie die Tabelle automatisch an und richten Sie die Tabelle nach Word aus? Apache-POI?

Dieser Code generiert ein Word-Dokument zum Extrahieren von Daten aus Java in eine Word-Datei, die sich in Laufwerk C befindet. Ich habe die Breite manuell eingestellt, aber es funktioniert jetzt gut. Wenn wäre für mich wertvoll sein, wenn die ordnungsgemäße Führung

vorgesehen
public Word2Doc() throws Exception { 

    System.out.println("This is Word To Document Class"); 

    File file = null; 
      FileOutputStream fos = null; 
      XWPFDocument document = null; 
      XWPFParagraph para = null; 
      XWPFRun run = null; 
      try { 
       // Create the first paragraph and set it's text. 
       document = new XWPFDocument(); 
       para = document.createParagraph(); 

       para.setAlignment(ParagraphAlignment.CENTER); 

       para.setSpacingAfter(100); 

       para.setSpacingAfterLines(10); 
       run = para.createRun(); 
       for(int i=1; i<=5; i++) 
       run.setText("Test Name \009\009\009 Value \t\t\t\t Normal Ranges\013\013"); 
       run.addBreak(); // similar to new line 
       run.addBreak(); 

       XWPFTable table = document.createTable(4, 3); 

       table.setRowBandSize(1); 
       table.setWidth(1); 
       table.setColBandSize(1); 
       table.setCellMargins(1, 1, 100, 30); 

       table.setStyleID("finest"); 


       table.getRow(1).getCell(1).setText("EXAMPLE OF TABLE"); 
       table.getRow(2).getCell(1).setText("fine"); 
       XWPFParagraph p1 = table.getRow(0).getCell(0).getParagraphs().get(0); 
       p1.setAlignment(ParagraphAlignment.CENTER); 
         XWPFRun r1 = p1.createRun(); 
         r1.setBold(true); 
         r1.setText("Test Name"); 
         r1.setItalic(true); 
         r1.setFontFamily("Courier"); 
         r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH); 
         r1.setTextPosition(100); 

       //Locating the cell values 
         table.getRow(0).getCell(1).setText("Value"); 
         table.getRow(0).getCell(2).setText("Normal Ranges"); 

         table.getRow(2).getCell(2).setText("numeric values"); 

         table.setWidth(120); 

       file = new File("c:\\nwhpe.docx"); 
       if(file.exists()) 
        file.delete(); 


       FileOutputStream out = new FileOutputStream(file); 
       document.write(out); 
       out.close(); 
      } 

     } 
public static void main(String ar[]) throws Exception{ 
    new Word2Doc(); 
} 

}

Antwort

4

Um die Breite einer Tabelle:

XWPFTable table = doc.createTable(nRows, nCols); 
    table.getCTTbl().addNewTblPr().addNewTblW().setW(BigInteger.valueOf(10000)); 

Um Spaltenbreite eingestellt:

cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000)); 

Wenn die Daten in der Zelle ansteigen, wirkt sich dies auf die Breite der Spalte aus, dh die Spaltenbreite erhöht sich ebenfalls, um diese Art von Problem zu vermeiden ms müssen wir die Länge des Zeichenfolgenwerts in der Zelle überprüfen, und wir müssen \ n (neue Zeile) in der Zeichenfolge hinzufügen, indem wir dies tun, können wir die Breite der Spalte festlegen.

In meinem Projekt habe ich viel versucht, Spaltenbreite zu setzen, und ich habe dieses Problem gelöst, indem ich Daten in der Zelle kontrolliere.

+0

Was sind die Einheiten? (d. h. was bedeuten 2000 und 10000?) – golimar

11

um die Tabelle automatisch anzupassen, wird die Breite im Grunde nur auf eine bestimmte Größe erweitert. Beispiel

CTTbl table  = poiTable.getCTTbl(); 
CTTblPr pr   = table.getTblPr(); 
CTTblWidth tblW = pr.getTblW(); 
tblW.setW(BigInteger.valueOf(5000)); 
tblW.setType(STTblWidth.PCT); 
pr.setTblW(tblW); 
table.setTblPr(pr); 

wie für den Tisch in die Mitte Ausrichten

CTJc jc = pr.addNewJc();   
jc.setVal(STJc.RIGHT); 
pr.setJc(jc);