1. 程式人生 > >踩坑日記--poi操作word設定表格列寬

踩坑日記--poi操作word設定表格列寬

今天遇到一個問題,使用poi操作word,生成的表格逐列設定列寬無效。一直找不出原因,網上搜索也沒人提醒說是什麼原因,最後發現是未設定列自動伸縮(tblWidth.setType(STTblWidth.DXA);)導致。程式碼如下:

/** 
* @Description: 設定列寬和垂直對齊方式 
*/  
public void setCellWidthAndVAlign(XWPFTableCell cell, String width, STVerticalJc.Enum typeEnum, STJc.Enum vAlign) {
	CTTc cttc = cell.getCTTc();
	CTTcPr cellPr = getCellCTTcPr(cell);
	cellPr.addNewVAlign().setVal(typeEnum);
	cttc.getPList().get(0).addNewPPr().addNewJc().setVal(vAlign);
	CTTblWidth tblWidth = cellPr.isSetTcW() ? cellPr.getTcW() : cellPr.addNewTcW();
	if(!StringUtils.isEmpty(width)){
		tblWidth.setW(new BigInteger(width));
		tblWidth.setType(STTblWidth.DXA);
	}
}

//設定內容水平居中及列寬
XWPFTableCell cell = table.getRow(rowNum).getCell(0);
setCellWidthAndVAlign(cell, "980", STVerticalJc.CENTER,STJc.CENTER);
cell = table.getRow(rowNum).getCell(1);
setCellWidthAndVAlign(cell, "6500", STVerticalJc.CENTER,STJc.CENTER);
cell = table.getRow(rowNum).getCell(2);
setCellWidthAndVAlign(cell, "1650", STVerticalJc.CENTER,STJc.CENTER);
cell = table.getRow(rowNum).getCell(3);
setCellWidthAndVAlign(cell, null, STVerticalJc.CENTER,STJc.CENTER);