1. 程式人生 > >Apache POI 設定Excel單元格的寬度和高度

Apache POI 設定Excel單元格的寬度和高度

原博作者:Tony Qu

原博連結

在Excel中,單元格的寬度其實就是列的寬度,因為Excel假設這一列的單元格的寬度肯定一致。所以要設定單元格的寬度,我們就得從列的寬度下手,HSSFSheet有個方法叫SetColumnWidth,共有兩個引數:一個是列的索引(從0開始),一個是寬度。
現在假設你要設定B列的寬度,就可以用下面的程式碼:

HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1″);

sheet1.SetColumnWidth
(1, 100 * 256);

這裡你會發現一個有趣的現象,SetColumnWidth的第二個引數要乘以256,這是怎麼回事呢?
其實,這個引數的單位是1/256個字元寬度,也就是說,這裡是把B列的寬度設定為了100個字元。
剛才說的是如何設定,那如何去讀取一個列的寬度呢?直接用GetColumnWidth方法,這個方法只有一個引數,那就是列的索引號。如下所示:

int col1width = sheet1.GetColumnWidth(1);

說完寬度,我們來說高度,在Excel中,每一行的高度也是要求一致的,所以設定單元格的高度,其實就是設定行的高度,所以相關的屬性也應該在HSSFRow上,它就是HSSFRow.Height和HeightInPoints,這兩個屬性的區別在於HeightInPoints的單位是點,而Height的單位是1/20個點,所以Height的值永遠是HeightInPoints的20倍。
要設定第一行的高度,可以用如下程式碼:

sheet1.CreateRow(0).Height = 200*20;

或者

sheet1.CreateRow(0).HeightInPoints = 200;

如果要獲得某一行的行高,可以直接拿HSSFRow.Height屬性的返回值。

你可能覺得一行一行設定行高或者一列一列設定列寬很麻煩,那你可以考慮使用HSSFSheet.DefaultColumnWidth、HSSFSheet.DefaultRowHeight和HSSFSheet.DefaultRowHeightInPoints屬性。
一旦設定了這些屬性,如果某一行或者某一列沒有設定寬度,就會使用預設寬度或高度。程式碼如下:

sheet1.DefaultColumnWidth=100*256;
sheet1.DefaultRowHeight=30*20;

相關範例請見NPOI 1.2正式版中的SetWidthAndHeightInXls專案
參考來源 POI 1.2教程 – 2.2.7 設定單元格的寬度和高度