2013-03-01 3 views
6

Как сделать эту таблицу автоматической привязкой к ширине страницы документа, когда размер столбца увеличивается, используя apache-poi и выравнивая эту таблицу с центром.Как автоматически подгонять стол и выравнивать таблицу до центра, в соответствии с размером документа Word Apache-POI?

Этот код генерирует слово Документ, извлекающий данные из Java в текстовый файл, расположенный на диске c. Я вручную установил ширину, но теперь она отлично работает. Если бы полезно для меня, если надлежащее руководство предоставляется

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

}

ответ

4

Чтобы задать ширину таблицы:

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

Чтобы установить ширину столбца:

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

Если данные увеличиваются в ячейке, он влияет на ширину столбца, т. Е. Ширина столбца также будет увеличиваться, чтобы избежать такого искажения ms, нам нужно проверить длину строкового значения в ячейке, и нам нужно добавить \ n (новую строку) в строку, выполнив это, мы можем установить ширину столбца.

В моем проекте я изо всех сил пытался установить ширину столбца, и я решил эту проблему, контролируя данные в ячейке.

+0

Какие единицы? (то есть, что означает 2000 и 10000?) – golimar

11

, чтобы настроить стол на автоматическую подгонку, в основном это просто расширение ширины до определенного размера. Пример

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

, как для выравнивания таблицы в центре

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