使用POI导出Excel时,关于设置带有多行表头表格自动宽度的问题解决办法


直接说吧!

sheet.autoSizeColumn((short)col, true);

 

只要这样写就解决了!

第一个参数是自动宽度的列数(第几列),第二个参数是说是否算上已经合并的单元格。

 

本来写的代码:

 1 for (int col = 0; col < propIds.size(); col++) {
 2         sheet.autoSizeColumn((short)col);
 3         int maxColumnWidth = sheet.getColumnWidth(col);
 4         int width = 0;
 5         for (int i = 1; i <= headDeal.rows; i++) {
 6             if(sheet.getRow(i).getCell(col).getStringCellValue().length() != 0)
 7             width = sheet.getRow(i).getCell(col).getStringCellValue().length() * 512;
 8         }
 9         maxColumnWidth = (maxColumnWidth>width) ? maxColumnWidth : width;
10         sheet.setColumnWidth(col, maxColumnWidth);
11 }
12 System.out.println("header rows: " + headDeal.rows);

 

 

中间的代码(第3到第10行)

(除第一行for循环和第二行sheet.autoSizeColumn((short)col); 之外),

就是我本来写的解决办法,功能同样能实现。

不过,算是白写了,poi原来自带一种方法的。

其中的 512 ,是因为中文在表格中被解析会占用512的宽度所致,数字和英文256。

 

结果看了源码才知道,原来poi自带有合并表格模式

意思就是:poi对于合并表头的表格设计,在sheet.autoSizeColumn 有方法,第二个参数就是设置是否加入被合并的表格计算自动宽度。(true是加入,false不加,默认false)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM