项目情况:
pmdb项目中需要导出excel文件,因为文件格式为最简单的表格样式,所以编写了一个通用的方法,通过输入查询出来的数据,生成excel,使用自适应的方式设置列宽。这时候虽然根据表格内容设置的列宽满足要求,但是表头的部分标题因为过长导致被遮挡。
解决方式:
查询了poi底层实现之后,发觉它是通过SheetUtil的getColumnWidth方法获取每列中每个单元格中内容的长度进行计算的。于是,我决定使用这个方法将所有的表头的标题内容长度取出来,判断这个长度是否大于sheet中的该列计算出来的列宽,如果是,就设置该列的列宽为标题的长度。
代码:
//根据类型指定excel文件的列宽
private static void setColumnWidthByType(SXSSFSheet sheet,int titleLength) {
sheet.trackAllColumnsForAutoSizing();
for(int i=0;i<titleLength;i++){
int columnWidth = sheet.getRow(0).getCell(i).getStringCellValue().length();//获取表头的宽度
int autowidth=(int)SheetUtil.getColumnWidth(sheet,i,false,1,sheet.getLastRowNum());
if(columnWidth>autowidth){
shee