NPOI 教程 - 2.1單元格合並
合並單元格在制作表格時很有用,比如說表格的標題就經常是把第一行的單元格合並居中。那么在NPOI中應該如何實現單元格的合並呢?
為了實現這一功能,NPOI引入了新的概念,即Region,因為合並單元格,其實就是設定一個區域。下面說一下Region類的參數,Region總共有4個參數,如下所示
| Region的參數 | 說明 |
| FirstRow | 區域中第一個單元格的行號 |
| FirstColumn | 區域中第一個單元格的列號 |
| LastRow | 區域中最后一個單元格的行號 |
| LastColumn | 區域中最后一個單元格的列號 |
由於單元格的合並都是在表的基礎上建立的,所以我們得先建Sheet:
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet sheet = hssfworkbook.CreateSheet("new sheet");
場景一 標題行的合並
這種場景是最常見的,比如說我們要建立一張銷售情況表,英文叫Sales Report
我們先設置居中和字體樣式,這里我們采用20號字體,代碼如下:
HSSFRow row = sheet.CreateRow(0);
HSSFCell cell = row.CreateCell(0);
cell.SetCellValue("Sales Report");
HSSFCellStyle style = hssfworkbook.CreateCellStyle();
style.Alignment = HSSFCellStyle.ALIGN_CENTER;
HSSFFont font = hssfworkbook.CreateFont();
font.FontHeight = 20*20;
style.SetFont(font);
cell.CellStyle = style;
要產生圖中的效果,即把A1:F1這6個單元格合並,然后添加合並區域:
sheet.AddMergedRegion(new Region(0, 0, 0, 5));
場景二 多行合並
看完場景一,你可不要認為多行合並就需要一行一行做,其實也只需要一行代碼,比如說我們要把C3:E5合並為一個單元格,那么就可以用下面的代碼:
sheet.AddMergedRegion(new Region(2, 2, 4, 4));
提示 即使你沒有用CreateRow和CreateCell創建過行或單元格,也完全可以直接創建區域然后把這一區域合並,Excel的區域合並信息是單獨存儲的,和RowRecord、ColumnInfoRecord不存在直接關系。
本節將圍繞“對齊”選項卡中的設置展開,雖然實際上你會發現該選項卡中的很多設置和對齊沒有什么關系。合並單元格已經在2.2.2節講過了,這里就不提了。
首先我們用代碼創建必要的單元格,代碼如下:
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
HSSFRow row = sheet1.CreateRow(0);
row.CreateCell(0).SetCellValue("Test");
這里我們假設在A0單元格中加入了文本Test。
請注意接下來我們要做的所有操作都是在CellStyle的基礎上完成的,所以我們創建一個HSSFCellStyle:
HSSFCellStyle style=hssfworkbook.CreateCellStyle();
水平對齊
這里用的是HSSFCellStyle.Alignment,默認值自然是常規,即HSSFCellStyle.ALIGN_GENERAL。
如果是左側對齊就是
style.Alignment = HSSFCellStyle.ALIGN_LEFT;
如果是居中對齊就是
style.Alignment = HSSFCellStyle.ALIGN_CENTER;
如果是右側對齊就是
style.Alignment = HSSFCellStyle.ALIGN_RIGHT;
如果是跨列舉中就是
style.Alignment = HSSFCellStyle.ALIGN_CENTER_SELECTION;
如果是兩端對齊就是
style.Alignment = HSSFCellStyle.ALIGN_JUSTIFY;
如果是填充就是
style.Alignment = HSSFCellStyle.ALIGN_FILL;
注意:以上選項僅當有足夠的寬度時才能產生效果,不設置寬度恐怕看不出區別。
垂直對齊
這里用的是HSSFCellStyle.VerticalAlignment,默認值為居中,即HSSFCellStyle.VERTICAL_CENTER
如果是靠上就是
style.VerticalAlignment=HSSFCellStyle.VERTICAL_TOP
如果是居中就是
style.VerticalAlignment=HSSFCellStyle.VERTICAL_CENTER
如果是靠下就是
style.VerticalAlignment=HSSFCellStyle.VERTICAL_BOTTOM
如果是兩端對齊就是
style.VerticalAlignment=HSSFCellStyle.VERTICAL_JUSTIFY
注意:以上選項僅當有足夠的高度時才能產生效果,不設置高度恐怕看不出區別。
自動換行
自動換行翻譯成英文其實就是Wrap的意思,所以這里我們應該用WrapText屬性,這是一個布爾屬性
style.WrapText = true;
效果如下所示:
文本縮進
這是一個不太引人注意的選項,所以這里給張圖出來,讓大家知道是什么,縮進說白了就是文本前面的空白,我們同樣可以用屬性來設置,這個屬性叫做Indention。
style.Indention = 3;
文本旋轉
文本方向大家一定在Excel中設置過,上圖中就是調整界面,主要參數是度數,那么我們如何在NPOI中設置呢?
style.Rotation=(short)90;
以上代碼是把單元格A1中的文本逆時針旋轉90度,等同於下圖中的設置:
請注意,這里的Rotation取值是從-90到90,而不是0-180度。
最后別忘了把樣式變量style賦給HSSFCellStyle.CellStyle,否則就前功盡棄了,呵呵!






