我能够在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));
我正在获取一个包含数据的表,但我想最小化
的大小但我想要这个尺码
答案 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));