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)
我正在获取一个包含数据的表,但我希望最小化其大小 
但我想要这个尺寸
首先,您需要确保已声明库的导入:
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
Run Code Online (Sandbox Code Playgroud)
然后,它只是喜欢,假设你要格式化cell-0的row-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 英寸测量。