NPOI 教程 - 2.1單元格合並


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

image

我們先設置居中和字體樣式,這里我們采用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合並為一個單元格,那么就可以用下面的代碼:

image

sheet.AddMergedRegion(new Region(2, 2, 4, 4));

提示 即使你沒有用CreateRow和CreateCell創建過行或單元格,也完全可以直接創建區域然后把這一區域合並,Excel的區域合並信息是單獨存儲的,和RowRecord、ColumnInfoRecord不存在直接關系。

 

本節將圍繞“對齊”選項卡中的設置展開,雖然實際上你會發現該選項卡中的很多設置和對齊沒有什么關系。合並單元格已經在2.2.2節講過了,這里就不提了。

image

首先我們用代碼創建必要的單元格,代碼如下:

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;

效果如下所示:

image

 

文本縮進

image

這是一個不太引人注意的選項,所以這里給張圖出來,讓大家知道是什么,縮進說白了就是文本前面的空白,我們同樣可以用屬性來設置,這個屬性叫做Indention。

style.Indention = 3;

 

文本旋轉

文本方向大家一定在Excel中設置過,上圖中就是調整界面,主要參數是度數,那么我們如何在NPOI中設置呢?

style.Rotation=(short)90;

以上代碼是把單元格A1中的文本逆時針旋轉90度,等同於下圖中的設置:

image   

 

請注意,這里的Rotation取值是從-90到90,而不是0-180度。

 

最后別忘了把樣式變量style賦給HSSFCellStyle.CellStyle,否則就前功盡棄了,呵呵!


免責聲明!

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



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