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

luc*_*fer 1 java apache excel 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));
Run Code Online (Sandbox Code Playgroud)

我正在获取一个包含数据的表,但我希望最小化其大小 在此输入图像描述

但我想要这个尺寸在此输入图像描述

Ist*_*tso 6

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

import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
Run Code Online (Sandbox Code Playgroud)

然后,它只是喜欢,假设你要格式化cell-0row-0:

table.getRow(0).getCell(0).getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));
Run Code Online (Sandbox Code Playgroud)

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

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));
          } 
        }
Run Code Online (Sandbox Code Playgroud)

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


小智 5

创建表格时,布局默认设置为“自动”,因此单元格的宽度将始终增加以跟随字符串的长度。根据 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);
Run Code Online (Sandbox Code Playgroud)

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

    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));
        }
    }
Run Code Online (Sandbox Code Playgroud)

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