poi設置行高列寬


poi設置行高列寬

 前些天寫了一篇用POI導出Excel遇到的一個怪異的問題,今天有用到了POI但是這次不適合用模板,所有的布局都是用程序來完成的。所以有遇到了些意想不到的問題。其實就兩個問題,設置行高和設置列寬。
         首先我查看了POI3.0的API發現HSSFRow對象有setHeight(short height)方法,我就寫了點測試代碼

poi設置行高列寬    public static void main(String[] args) {
poi設置行高列寬        try {
poi設置行高列寬            HSSFWorkbook wb = new HSSFWorkbook();
poi設置行高列寬            HSSFSheet sheet = wb.createSheet();
poi設置行高列寬            HSSFRow row = sheet.createRow(0);
poi設置行高列寬            row.setHeight((short) 25);//目的是想把行高設置成25px
poi設置行高列寬            FileOutputStream fileOut = new FileOutputStream("c://a.xls");
poi設置行高列寬            wb.write(fileOut);
poi設置行高列寬            fileOut.close();
poi設置行高列寬        }
poi設置行高列寬        catch (Exception e) {
poi設置行高列寬            e.printStackTrace();
poi設置行高列寬        }
poi設置行高列寬    }

打開a.xls發現結果不是我想要的,第一行的高度都沒有,沒有報錯說明代碼有問題,為什么回沒有高度呢?是不是單位不一樣呢?我把row.setHeight((short) 25);改成了row.setHeight((short) 250);結果發現第一行出來了,但是這是怎么一個換算關系呢?我查看了一下導出的Excel第一行高是16像素,換算一下得出row.setHeight((short) 15.625);表示行高為一個像素,那么想設成幾個像素就好做了。比如
row.setHeight((short) (15.625*n));//n為行高的像素數。
其實在API中還有一個HSSFRow 對象還有一個設置行高的函數setHeightInPoints(float height);這個函數中參數就是行高的像素數,比setHeight函數要方便多了。
行高設置完成了,接下來設置列寬

poi設置行高列寬    public static void main(String[] args) {
poi設置行高列寬        try {
poi設置行高列寬            HSSFWorkbook wb = new HSSFWorkbook();
poi設置行高列寬            HSSFSheet sheet = wb.createSheet();
poi設置行高列寬            HSSFRow row = sheet.createRow(0);
poi設置行高列寬            row.setHeight((short) 250);
poi設置行高列寬            sheet.setColumnWidth((short) 0, (short) 250);
poi設置行高列寬            FileOutputStream fileOut = new FileOutputStream("c://a.xls");
poi設置行高列寬            wb.write(fileOut);
poi設置行高列寬            fileOut.close();
poi設置行高列寬        }
poi設置行高列寬        catch (Exception e) {
poi設置行高列寬            e.printStackTrace();
poi設置行高列寬        }
poi設置行高列寬    }

接下來說說sheet.setColumnWidth((short) 0, (short) 250);
第一個參數表示要為第幾列設置,第二個參數表示列的寬度,看看上面的代碼按說第一行第一列的單元格形狀應該是個正方形,因為寬和高都是250,但是打開導出后的Excel發現寬度沒有高度大,是個長方形,查看該列的寬度僅為7個像素,看來行高和列寬的單位是不一樣的,同樣換一算sheet.setColumnWidth((short) 0, (short) (35.7));表示高度為一個像素,同樣設置列寬的像素為sheet.setColumnWidth((short) 0, (short) (35.7*n));//n為列高的像素數。
但是目前列寬我還沒找到其他的比這個更簡單的函數,如果有朋友比這個更簡單的希望大家多多交流。


免責聲明!

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



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