NPOI 教程 - 2.3设置单元格的背景和图案

          

          2009-11-18 14:26:58|  分类:           C#.net                           |字号 订阅        

                                转载http://liyingchun343333.blog.163.com/blog/static/357973162009101822658307/

本节我们将用NPOI来为单元格添加背景和图案。

在 之前的教程中,我们已经提到HSSFCellStyle  有两个背景颜色属性,一个叫FillBackgroundColor,另一个叫FillForegroundColor,但其实这指的都是背景颜色,那为   什么还有ForegroundColor呢?为了能够帮助大家理解,我们举一个实际的例子,下面这个图案是Excel的一个单元格: 

image

线是白色的,背景是红色的。这里的线其实就是下面的Excel界面中的图案: 

image

 

 

 

至于线的颜色则是图案颜色,即白色。

 

所以以上单元格如果要用NPOI来设置就可以用以下代码完成:

 
  
//fill background HSSFCellStyle style8 = hssfworkbook.CreateCellStyle(); style8.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.WHITE.index; style8.FillPattern = HSSFCellStyle.SQUARES; style8.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.RED.index; sheet1.CreateRow(7).CreateCell(0).CellStyle = style8;
 
   

现在是不是清楚一些了,这里的FillPattern就图案样式,所有的枚举值都是HSSFCellStyle的常量;FillForegroundColor就是图案的颜色,而FillBackgroundColor则是背景的颜色,即红色。

   

下面罗列一下图案样式及其对应的值:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
图案样式常量
imageHSSFCellStyle.NO_FILL
imageHSSFCellStyle.ALT_BARS
imageHSSFCellStyle.FINE_DOTS
imageHSSFCellStyle.SPARSE_DOTS
imageHSSFCellStyle.LESS_DOTS
imageHSSFCellStyle.LEAST_DOTS
imageHSSFCellStyle.BRICKS
imageHSSFCellStyle.BIG_SPOTS
imageHSSFCellStyle.THICK_FORWARD_DIAG
imageHSSFCellStyle.THICK_BACKWARD_DIAG
imageHSSFCellStyle.THICK_VERT_BANDS
imageHSSFCellStyle.THICK_HORZ_BANDS
imageHSSFCellStyle.THIN_HORZ_BANDS
imageHSSFCellStyle.THIN_VERT_BANDS
imageHSSFCellStyle.THIN_BACKWARD_DIAG
imageHSSFCellStyle.THIN_FORWARD_DIAG
imageHSSFCellStyle.SQUARES
imageHSSFCellStyle.DIAMONDS

通过这张表,你将很容易找到自己需要的样式,不用再去一个一个猜测了。

 在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;
 
posted @ 2013-01-11 16:10  truename  阅读(989)  评论(0编辑  收藏  举报