直接说吧!
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)