1.引入依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.10</version>
</dependency>
2.設(shè)置列寬
public class AuditUnitLevelReportColumnHandler extends AbstractColumnWidthStyleStrategy {
@Override
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head, Integer integer, Boolean isHead) {
boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
if (needSetWidth) {
Sheet sheet = writeSheetHolder.getSheet();
int columnIndex = cell.getColumnIndex();
if (columnIndex == 1){
//要求將當(dāng)前列的列寬設(shè)置為33英寸,理論值應(yīng)該是33×256=8448,
//但是這里的設(shè)值是8648,具體原因請看下面的計算邏輯
sheet.setColumnWidth(1,8648);
}else if (columnIndex == 2){
sheet.setColumnWidth(2,5576);
}else {
sheet.setColumnWidth(columnIndex,3016);
}
}
}
}
setColumnWidth(i,j)函數(shù)中,i是列的下標(biāo),從0開始,j是列的寬度,單位是1/256個字符寬度,所以代碼中要乘以256,兩個參數(shù)都必須是整數(shù)
列寬計算邏輯:以下標(biāo)為1的列的寬度計算邏輯說明下,正常情況下設(shè)置的列寬是33乘以256,但實際上我們生成的excel中列寬是32.22,因為字體樣式、大小以及單元格邊框等占用額外的像素,所以實際的列寬比代碼中設(shè)置的列寬要小0.78英寸(excel中的列寬單位是英寸),代碼中設(shè)置的33也是英寸單位,那么實際我們需要設(shè)置成33.78英寸,但33.78乘以256是Double類型的數(shù)值,setColumnWidth的第二個參數(shù)必須是整數(shù),所以在33.78*256=8647.68的基礎(chǔ)上向上取整為8648
也需要注意的是:我用的是office365版本的excel,而不同版本的excel以及字體、單元格邊框設(shè)置等因素都會影響到excel最終的列寬,可能不是上面提到的0.78的誤差值,所以大家需要根據(jù)自己的情況來更改這個誤差值,不能直接把這個誤差值照搬到自己的代碼中。