如何在Apache POI中格式化XWPFTable中的单元格

时间:2014-12-18 07:47:37

标签: java excel apache apache-poi

我能够在Apache POI中创建一个表格,我的表格中有适当的值,但我想要的是我想减少表格中列大小的单元格大小如何做,请帮助..以下是我所做的事情

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

        r3.setText("MSH Activity Score Card");
        r3.setBold(true);



        //creating first row 
        table.getRow(0).getCell(1).setText("Job ID#"); 
        table.getRow(0).getCell(2).setText("1362"); 

        //creating second row

        table.getRow(1).getCell(1).setText("Job Title#"); 
        table.getRow(1).getCell(2).setText("Global Network Architect Consultant");

        //creating third row
        table.getRow(2).getCell(1).setText("Client");
        table.getRow(2).getCell(2).setText("Carnival Corporation"); 

        //creating fourth row
        table.getRow(3).getCell(1).setText("Start Date");
        table.getRow(3).getCell(2).setText("11/13/2014");

       //creating fifth row
        table.getRow(4).getCell(1).setText("Days Old");
        table.getRow(4).getCell(2).setText("33");

        CTTblWidth width = table.getCTTbl().addNewTblPr().addNewTblW();

        width.setType(STTblWidth.DXA);
        width.setW(BigInteger.valueOf(1500));

我正在获取一个包含数据的表,但我想最小化enter image description here

的大小

但我想要这个尺码enter image description here

3 个答案:

答案 0 :(得分:6)

首先,您需要确保已声明库的导入:

import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

然后就是这样,假设您要在cell-0上格式化row-0

table.getRow(0).getCell(0).getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));

或者在创建最后一行之后放置此片段以格式化所有单元格:

for(int x = 0;x < table.getNumberOfRows(); x++){
          XWPFTableRow row = table.getRow(x);
          int numberOfCell = row.getTableCells().size();
          for(int y = 0; y < numberOfCell ; y++){
              XWPFTableCell cell = row.getCell(y);

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

*但请记住,单元格的宽度将始终增加,以跟随字符串的长度。

答案 1 :(得分:4)

创建表格后,默认情况下布局设置为“auto”,因此单元格的宽度将始终增加,以跟随字符串的长度。根据OpenXML标记,它看起来像 w:tblPr w:tblLayout w:type="auto"
解决方案是将布局设置为固定并设置单个列长度 w:tblPr w:tblLayout w:type="fixed"

以下是设置表格布局的poi代码:

XWPFTable table = document.createTable();
CTTblLayoutType type = table.getCTTbl().getTblPr().addNewTblLayout();
type.setType(STTblLayoutType.FIXED);

以下是设置个别宽度的方法:

    for (int i = 0; i < table.getNumberOfRows(); i++) {
        XWPFTableRow row = table.getRow(i);
        int numCells = row.getTableCells().size();
        for (int j = 0; j < numCells; j++) {
            XWPFTableCell cell = row.getCell(j);
            CTTblWidth cellWidth = cell.getCTTc().addNewTcPr().addNewTcW();
            CTTcPr pr = cell.getCTTc().addNewTcPr();
            pr.addNewNoWrap();
            cellWidth.setW(BigInteger.valueOf(2880);
        }
    }

柱长2880是以点(dxa)或1/1440英寸(等于 2英寸)的二十分之一来测量的。

答案 2 :(得分:2)

在我的项目中,我一直在努力设置列宽,我有           通过控制单元格中的数据解决了这个问题。

   CTTblWidth width = table.getCTTbl().addNewTblPr().addNewTblW();
   width.setType(STTblWidth.DXA);
   width.setW(BigInteger.valueOf(9072));