poi設置行高列寬
前些天寫了一篇用POI導出Excel遇到的一個怪異的問題,今天有用到了POI但是這次不適合用模板,所有的布局都是用程序來完成的。所以有遇到了些意想不到的問題。其實就兩個問題,設置行高和設置列寬。
首先我查看了POI3.0的API發現HSSFRow對象有setHeight(short height)方法,我就寫了點測試代碼
public static void main(String[] args) {
try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFRow row = sheet.createRow(0);
row.setHeight((short) 25);//目的是想把行高設置成25px
FileOutputStream fileOut = new FileOutputStream("c://a.xls");
wb.write(fileOut);
fileOut.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
打開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函數要方便多了。
行高設置完成了,接下來設置列寬
public static void main(String[] args) {
try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFRow row = sheet.createRow(0);
row.setHeight((short) 250);
sheet.setColumnWidth((short) 0, (short) 250);
FileOutputStream fileOut = new FileOutputStream("c://a.xls");
wb.write(fileOut);
fileOut.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
接下來說說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為列高的像素數。
但是目前列寬我還沒找到其他的比這個更簡單的函數,如果有朋友比這個更簡單的希望大家多多交流。