Excel單元格行寬的設置


在經過Jxls或者POI導出數據至excel中后,發現有的單元格內容太多,既沒有自動換行,也沒有自動增大行高。那如何通過Java代碼來實現呢?請看下面步驟:

(一)首先,將excel設置為最合適的行高,通過CTRow對象的setCustomHeight(false)函數實現,具體的代碼如下:

XSSFWorkbook workbook = new XSSFWorkbook(文件路徑或者文件流);

XSSFSheet sheet = workbook.getSheet(sheetIndex);

XSSFRow xssfRow = sheet.getRow(rowIndex);

CTRow ctRow = xssfRow.getCTRow();

ctRow.setCustomHeight(false);

(二)然后,循環每個sheet頁的行,通過XSSFCell的setWrapText(true),就可以設置單元格自動換行,並且自動調整行高,將單元格內容全部顯示出來;

(三)最后,對於合並的單元格,只能是通過XSSFRow的setHeight(行高值)來設置,這里說一下思路:

   (1)通過sheet獲取當前sheet頁總共有哪些合並的單元格,例如List<CellRangeAddress> listCombineCell = sheet.getMergedRegions();

   (2)計算合並單於格的高度和寬度,采用循環的方式求的每一行的高度之和或者是每一列的寬度之和;

   (3)獲取合並單元格的內容,首先統計中文字符的個數,然后使用String的getByte().length獲取字節數,加上中文字符的個數,最后將這兩者之和乘以256(為何要乘以256,可以看POI中獲取列寬的源碼,在里面除以列256),這樣得到了內容的長度;

   (4)若內容的長度小於合並單元格的寬度,就不需要進行行高設置了;若內容的長度大於合並單元格的寬度,那么通過合並單元格的寬度除以內容的長度,計算內容需要多少行才能全部顯示出來,這里采用取比商大的最小整數,考慮到單元格有padding和margin距離,最好是再加上一行量;這里需要注意如何計算單元格中內容的寬度了,首先將字符串形式的內容按換行符轉換成字符數組,接着計算字符數組中每一個元素的寬度,將它們的寬帶和單元格實際寬度相除,這樣就可以統計字符數組每個元素需要多少行來顯示,最終將這些行數累加起來,最后還加上字符數組大小值,這樣就得到了單元格內容需要的行數。

   (5)計算合並單元格字體的高度,然后乘以內容需要的行數(第4步中求得的行數),得到內容需要的總高度;

   (6)判斷合並單元格是否是行合並(通過起始行號和終止行號是否相等來判斷,若相等就不是行合並,否則就是行合並),若是行合並的情況,那么就需要計算是由多少行合並的(終止行號減去起始行號,再加一),接着計算每一行需要的平均高度(單元格內容的總高度除以行合並的單元格的行數),然后通過循環設置行合並的單元格區域的每一行所需要的平均高度。若不是行合並的單元格,那么直接將行高設置為單元格內容所需的總高度即可。

 (四)備注:若不想對所有導出數據的樣式做修改,那么可以這樣設置好模板,在需要修改行高的單元格中設置自定換行的屬性,這樣可以避免修改不需要調整樣式的單元格。

https://www.cnblogs.com/bien94/p/11664397.html

// 設置行的高度
sheet.getRow(3).setHeight((short) (100*20));
// 設置列的寬度
sheet.setColumnWidth(0, 256*width+184);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM