1. 程式人生 > >NPOI 單元格格式設定

NPOI 單元格格式設定

////自動換行   
            ////自動換行翻譯成英文其實就是Wrap的意思,所以這裡我們應該用WrapText屬性,這是一個布林屬性   
            //style6.WrapText = true;   
            ////文字縮排   
            ////這是一個不太引人注意的選項,所以這裡給張圖出來,讓大家知道是什麼,縮排說白了就是文字前面的空白,我們同樣可以用屬性來設定,   
            ////這個屬性叫做Indention。   
            //style6.Indention = 3;   
            ////文字旋轉   
            ////文字方向大家一定在Excel中設定過,上圖中就是調整介面,主要引數是度數,那麼我們如何在NPOI中設定呢?  


            //style6.Rotation=(short)90;   
            ////以上程式碼是把單元格A1中的文字逆時針旋轉90度   
            ///*   
            // * 請注意,這裡的Rotation取值是從-90到90,而不是0-180度。   
            // * 最後別忘了把樣式變數style賦給HSSFCellStyle.CellStyle,否則就前功盡棄了,呵呵!   
            // * **/   
            //#endregion   
            //#region 7.設定單元格邊框   
            ////*************************************設定單元
格邊框******************************************   

            ////邊框和其他單元格設定一樣也是在HSSFCellStyle上操作的,HSSFCellStyle有2種和邊框相關的屬性,分別是:   
            ////邊框相關屬性 說明 範例    
            ////Border+方向 邊框型別 BorderTop, BorderBottom,BorderLeft, BorderRight    
            ////方向+BorderColor 邊框顏色 TopBorderColor,BottomBorderColor, LeftBorderColor, RightBorderColor    


            ////其中邊框型別分為以下幾種:   
            ////邊框範例圖 對應的靜態值    
            //// HSSFCellStyle.BORDER_DOTTED    
            //// HSSFCellStyle.BORDER_HAIR    
            //// HSSFCellStyle.BORDER_DASH_DOT_DOT    
            //// HSSFCellStyle.BORDER_DASH_DOT    
            //// HSSFCellStyle.BORDER_DASHED    
            //// HSSFCellStyle.BORDER_THIN    
            //// HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT    
            //// HSSFCellStyle.BORDER_SLANTED_DASH_DOT    
            //// HSSFCellStyle.BORDER_MEDIUM_DASH_DOT    
            //// HSSFCellStyle.BORDER_MEDIUM_DASHED    
            //// HSSFCellStyle.BORDER_MEDIUM    
            //// HSSFCellStyle.BORDER_THICK    
            //// HSSFCellStyle.BORDER_DOUBLE    
            ////至於顏色那就很多了,全部在HSSFColor下面,如HSSFColor.GREEN, HSSFColor.RED,都是靜態例項,可以直接引用。   
            ////下面我們假設我們要把一個單元格的四周邊框都設定上,可以用下面的程式碼:  

            //HSSFSheet sheet7 = hssfworkbook.CreateSheet("設定單元格邊框");   
            //// Create a row and put some cells in it. Rows are 0 based.   
            //HSSFRow row7 = sheet7.CreateRow(1);   
            //// Create a cell and put a value in it.   
            //HSSFCell cell7 = row7.CreateCell(1);   
            //// Style the cell with borders all around.   
            //HSSFCellStyle style7 = hssfworkbook.CreateCellStyle();   
            //style7.BorderBottom= HSSFCellStyle.BORDER_THIN;   
            //style7.BorderLeft= HSSFCellStyle.BORDER_THIN;   
            //style7.BorderRight= HSSFCellStyle.BORDER_THIN;   
            //style7.BorderTop = HSSFCellStyle.BORDER_THIN ;   
            //cell7.CellStyle= style7;   
            ////這段程式碼使用了最普通的細邊框,使得這個單元格看上去像塊空心磚頭。   
            ////注意:這裡我們沒有設定邊框的顏色,但這不會影響最終的效果,因為Excel會用預設的黑色給邊框上色。   
            ////如果要設定顏色的話,也很簡單,如下:   
            //style7.BottomBorderColor = HSSFColor.GREEN.index;   
            ////以上程式碼將底部邊框設定為綠色,要注意,不是直接把HSSFColor.GREEN賦給XXXXBorderColor屬性,而是把index的值賦給它。   
            //#endregion   


            //#region 8.設定單元格字型   
            ////*************************************設定單元格字型******************************************   
            ////本節我們將繼續使用NPOI來設定單元格格式,這一節我們主要講如何設定“字型”。   
            ////在設定字型之前,我們首先要做的就是建立字型物件,這和建立數字格式很相似。   

            //HSSFFont font8 = hssfworkbook.CreateFont();   
            ////這句話會在Excel檔案內部建立相應的FontRecord,所以你不用客戶因為自己機器上的Excel沒有相應的字型設定而導致設定丟失。   

            ////字型在設定完成後,我們就可以把它賦給單元格樣式,程式碼如下:   
            //HSSFSheet sheet8 = hssfworkbook.CreateSheet("設定單元格字型");   
            //HSSFRow row8 = sheet8.CreateRow(0);   
            //HSSFCell cell8 = row8.CreateCell(0);   
            //HSSFCellStyle style8 = hssfworkbook.CreateCellStyle();   
            //style8.SetFont(font8);   
            //cell8.CellStyle=style8;   
            ////這裡的cell1是HSSFCell的一個例項。   

            ////好了,下面我們就開始對字型進行設定。   
            ////字型名稱  

            ////這裡的字型名稱是通過HSSFFont.FontName進行設定的,至於具體的名稱,只要是常用字型都可以,比如說Arial, Verdana等   
            ////,當然也可以是中文字型名,如宋體、黑體等。不過設定字型名稱有個前提,那就是假設開啟這個xls檔案的客戶機上有這種字型   
            ////,如果沒有,Excel將使用預設字型。   
            ////下面就是設定字型名稱為“宋體”的程式碼:   
            //font8.FontName = "宋體";   


            ////字號   
            ////與字號有關的屬性有兩個,一個是FontHeight,一個是FontHeightInPoints。區別在於,FontHeight的值是FontHeightInPoints的20倍   
            ////,通常我們在Excel介面中看到的字號,比如說12,對應的是FontHeightInPoints的值,而FontHeight要產生12號字型的大小   
            ////,值應該是240。所以通常建議你用FontHeightInPoint屬性。   
            ////如果要設定字號為12,程式碼就是   
            //font8.FontHeightInPoints = 12;   


            ////字型顏色   
            ////這裡可能會與CellStyle上的ForegroundColor和BackgroundColor產生混淆,其實所有的字型顏色都是在HSSFFont的例項上設定的   
            ////,CellStyle的ForegroundColor和BackgroundColor分別指背景填充色和填充圖案的顏色,和文字顏色無關。   
            ////要設定字型顏色,我們可以用HSSFFont.Color屬性,顏色可以通過HSSFColor獲得,程式碼如下所示:   
            //font8.Color = HSSFColor.RED.index;   
            ////這行程式碼把文字設定為紅色。   


            ////下劃線   
            ////通常我們所說的下劃線都是單線條的,其實Excel支援好幾種下劃線,如下所示:   
            ////型別 對應的值    
            ////單下劃線 HSSFFont.U_SINGLE    
            ////雙下劃線 HSSFFont.U_DOUBLE    
            ////會計用單下劃線 HSSFFont.U_SINGLE_ACCOUNTING    
            ////會計用雙下劃線 HSSFFont.U_DOUBLE_ACCOUNTING    
            ////無下劃線 HSSFFont.U_NONE    
            ////當你要設定下劃線時,可以用HSSFFont.Underline屬性,這是一個byte型別的值,例如   
            //font8.Underline = HSSFFont.U_SINGLE;   
            ////這行程式碼就是設定單下劃線的程式碼。   


            ////上標下標   
            ////設定這東西可以用HSSFFont.TypeOffset屬性,值有以下幾種:   
            ////TypeOffset的值 說明    
            ////HSSFFont.SS_SUPER 上標    
            ////HSSFFont.SS_SUB 下標    
            ////HSSFFont.SS_NONE 普通,預設值    
            ////所以如果你要上標的話,可以用下面的程式碼:   
            //font8.TypeOffset=HSSFFont.SS_SUPER;   


            ////刪除線   
            ////設定這東西可以用HSSFFont.IsStrikeout屬性,當為true時,表示有刪除線;為false則表示沒有刪除線。   
            //#endregion   


            //#region 9.設定單元格的背景和圖案   
            ////*************************************設定單元格的背景和圖案******************************************   
            ////在之前的教程中,我們已經提到HSSFCellStyle有兩個背景顏色屬性,一個叫FillBackgroundColor,另一個叫FillForegroundColor   
            ////,但其實這指的都是背景顏色,那為什麼還有ForegroundColor呢?為了能夠幫助大家理解,我們舉一個實際的例子   
            ////,下面這個圖案是Excel的一個單元格:(白線紅格的網格)   
            ////線是白色的,背景是紅色的。這裡的線其實就是下面的Excel介面中的圖案:   
            ////至於線的顏色則是圖案顏色,即白色。   
            ////所以以上單元格如果要用NPOI來設定就可以用以下程式碼完成:   
            ////fill background   
            //HSSFSheet sheet9 = hssfworkbook.CreateSheet("設定單元格的背景和圖案");   
            //HSSFCellStyle style9 = hssfworkbook.CreateCellStyle();   
            //style9.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.WHITE.index;   
            //style9.FillPattern = HSSFCellStyle.SQUARES;   
            //style9.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.RED.index;   
            //sheet9.CreateRow(7).CreateCell(0).CellStyle = style9;   
            ////現在是不是清楚一些了,這裡的FillPattern就圖案樣式,所有的列舉值都是HSSFCellStyle的常量;FillForegroundColor就是圖案的顏色   
            ////,而FillBackgroundColor則是背景的顏色,即紅色。   
            //#endregion   


            //#region 10.設定單元格的寬度和高度   
            ////*************************************設定單元格的寬度和高度******************************************   
            ////在Excel中,單元格的寬度其實就是列的寬度,因為Excel假設這一列的單元格的寬度肯定一致。所以要設定單元格的寬度   
            ////,我們就得從列的寬度下手,HSSFSheet有個方法叫SetColumnWidth,共有兩個引數:一個是列的索引(從0開始),一個是寬度。   
            ////現在假設你要設定B列的寬度,就可以用下面的程式碼:   
            ////HSSFWorkbook hssfworkbook = new HSSFWorkbook();   
            //HSSFSheet sheet10 = hssfworkbook.CreateSheet("設定單元格的寬度和高度");   
            //sheet10.SetColumnWidth(1, 100 * 256);   
            ////這裡你會發現一個有趣的現象,SetColumnWidth的第二個引數要乘以256,這是怎麼回事呢?其實,這個引數的單位是1/256個字元寬度   
            ////,也就是說,這裡是把B列的寬度設定為了100個字元。   
            ////剛才說的是如何設定,那如何去讀取一個列的寬度呢?直接用GetColumnWidth方法,這個方法只有一個引數,那就是列的索引號。如下所示:   
            //int col1width = sheet10.GetColumnWidth(1);   
            ////說完寬度,我們來說高度,在Excel中,每一行的高度也是要求一致的,所以設定單元格的高度,其實就是設定行的高度   
            ////,所以相關的屬性也應該在HSSFRow上,它就是HSSFRow.Height和HeightInPoints,這兩個屬性的區別在於HeightInPoints的單位是點   
            ////,而Height的單位是1/20個點,所以Height的值永遠是HeightInPoints的20倍。   
            ////要設定第一行的高度,可以用如下程式碼:   
            //sheet10.CreateRow(0).Height = 200*20;   
            ////或者   
            //sheet10.CreateRow(0).HeightInPoints = 200;   
            ////如果要獲得某一行的行高,可以直接拿HSSFRow.Height屬性的返回值。   
            ////你可能覺得一行一行設定行高或者一列一列設定列寬很麻煩,那你可以考慮使用HSSFSheet.DefaultColumnWidth   
            ////、HSSFSheet.DefaultRowHeight和HSSFSheet.DefaultRowHeightInPoints屬性。   
            ////一旦設定了這些屬性,如果某一行或者某一列沒有設定寬度,就會使用預設寬度或高度。程式碼如下:   
            //sheet10.DefaultColumnWidth=100*256;   
            //sheet10.DefaultRowHeight=30*20;   
            //#endregion   


            ////把HSSFWorkbook例項寫入檔案   
            //FileStream file = new FileStream(Server.MapPath("test.xls"), FileMode.Create);   
            //hssfworkbook.Write(file);   
            //file.Close();   


            //*************************************基於模板******************************************   
            //read the template via FileStream, it is suggested to use FileAccess.Read to prevent file lock.   
            //book1.xls is an Excel-2007-generated file, so some new unknown BIFF records are added.    
            FileStream file11 = new FileStream(Server.MapPath("PayMain.xls"), FileMode.Open, FileAccess.Read);   

            HSSFWorkbook hssfworkbook11 = new HSSFWorkbook(file11);   
            HSSFSheet sheet11 = hssfworkbook11.GetSheet("Sheet2");   
            HSSFCellStyle style11 = hssfworkbook11.CreateCellStyle();   
            style11.BorderBottom = HSSFCellStyle.BORDER_THIN;   
            style11.BorderLeft = HSSFCellStyle.BORDER_THIN;   
            style11.BorderRight = HSSFCellStyle.BORDER_THIN;   
            style11.BorderTop = HSSFCellStyle.BORDER_THIN;   
            HSSFRow row11;   
            for (int i = 0; i < dt.Rows.Count; i++)   
            {   
                row11 = sheet11.CreateRow(7 + i);   
                for (int j = 0; j < 6; j++)   
                {   
                    HSSFCell cell11 = row11.CreateCell(j);   
                    cell11.SetCellValue(dt.Rows[i][j].ToString());   
                    cell11.CellStyle = style11;   
                }   
            }   

            row11 = sheet11.CreateRow(dt.Rows.Count + 7);   
            HSSFCell cell11_ = row11.CreateCell(0);   
            cell11_.SetCellValue("合計:");   
            cell11_ = row11.CreateCell(3);   
            cell11_.SetCellValue("建表人:");   
            //HSSFRow row11 = sheet11.CreateRow(7);   
            //HSSFCell cell10 = row11.CreateCell(0);   
            //HSSFCell cell11 = row11.CreateCell(1);   
            //HSSFCell cell12 = row11.CreateCell(2);   
            //HSSFCell cell13 = row11.CreateCell(3);   
            //HSSFCell cell14 = row11.CreateCell(4);   
            //HSSFCell cell15 = row11.CreateCell(5);   
            //cell10.SetCellValue("tessssss");   
            //cell11.SetCellValue("teffffff");   
            //cell12.SetCellValue("tegggggsss");   
            //cell13.SetCellValue("tesssssfwefsss");   
            //cell14.SetCellValue("tesssssfwefsss");   
            //cell15.SetCellValue("tesssssfwefsss");   
            //sheet11.GetRow(9).GetCell(0).SetCellValue(300);   
            //sheet11.GetRow(10).GetCell(1).SetCellValue(500050);   
            //sheet11.GetRow(11).GetCell(1).SetCellValue(8000);   
            //sheet11.GetRow(12).GetCell(1).SetCellValue(110);   
            //sheet11.GetRow(13).GetCell(1).SetCellValue(100);   
            //sheet11.GetRow(14).GetCell(1).SetCellValue(200);   
            //sheet11.GetRow(15).GetCell(1).SetCellValue(210);   
            //sheet11.GetRow(16).GetCell(1).SetCellValue(2300);   
            //sheet11.GetRow(17).GetCell(1).SetCellValue(240);   
            //sheet11.GetRow(18).GetCell(1).SetCellValue(180123);   
            //sheet11.GetRow(19).GetCell(1).SetCellValue(150);   

            //Force excel to recalculate all the formula while open   
            Response.ContentType = "application/vnd.ms-excel";   
            Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "T3"));   
            Response.Clear();   

            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();   
            dsi.Company = "NPOI Team";   
            hssfworkbook.DocumentSummaryInformation = dsi;   

            ////create a entry of SummaryInformation   
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();   
            si.Subject = "NPOI SDK Example";   
            hssfworkbook11.SummaryInformation = si;   

            MemoryStream file = new MemoryStream();   
            hssfworkbook11.Write(file);   
            Response.BinaryWrite(file.GetBuffer());   
            Response.End();   



            //sheet11.ForceFormulaRecalculation = true;    
            //FileStream file111 = new FileStream(Server.MapPath("T2.xls"), FileMode.Create);    
            //hssfworkbook11.Write(file111);   
            //file111.Close();