设置单元格样式 apache
HSSFCellStyle类表明一种单元格样式。能够经过这个类来设置单元格的边框样式、背景颜色、字体、水平和垂直对齐方式等等。api
HSSFCellStyle titleStyle = workbook.createCellStyle(); titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE); titleStyle.setBorderLeft((short)1); titleStyle.setBorderRight((short)1); titleStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE); titleStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index); titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); |
注意:若是咱们定义了一种样式,把它赋给一些单元格。而后基于新的须要,更改该样式中的某个属性,再赋给另外一些单元格。那么以前单元格样式的该属性也会被同时更改。app
好比咱们定义了样式,设置单元格背景色为红色:ide
HSSFCellStyle cellStyle = workbook.createCellStyle();函数 cellStyle.setFillForegroundColor(HSSFColor.RED.index); |
而后把它赋给一个单元格:编码
HSSFCell cell1 = row.createCell((short)1);lua cell1.setCellStyle(cellStyle);spa |
而后更改样式中的背景色属性为蓝色:orm
cellStyle.setFillForegroundColor(HSSFColor.BLUE.index); |
而后赋给另外一个单元格:
HSSFCell cell2 = row.createCell((short)2); cell2.setCellStyle(cellStyle); |
想固然,咱们预计在最终结果中cell1的背景色为红色,cell2的背景色为蓝色。可是结果是:两个单元格的背景色都变成了蓝色。
遇到这种状况,要预先定义两种不一样的单元格样式。
当一个EXCEL文件同时须要不少大同小异的单元格样式时,这样一必定义很麻烦。POI HSSF提供了一个HSSFCellUtil类(在org.apache.poi.hssf.usermodel.contrib包),里面有几个方法能够绕过HSSFCellStyle直接设定单元格的样式,但这几个方法会抛出NestableException异常,要处理这个异常,须要引用Apache的几个Common包:
commons-beanutils.jar
commons-beanutils-bean-collections.jar
commons-beanutils-core.jar
commons-lang.jar
commons-logging-api.jar
合并单元格
HSSFSheet.addMergedRegion(new Region())方法能够合并单元格,Region()中的一个构造函数含有四个参数,分别表明起始行、起始列、结束行、结束列:
sheet.addMergedRegion(new Region(startRow,startCell,endRow,endCell))); |
处理公式
HSSFCell.setCellFormula()方法用来在EXCEL单元格中写入公式。
cell = row.createCell((short)(dataFlag)); cell.setCellType(HSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("SUM("A1:D1")"); cell.setCellStyle(nameStyle); |
处理连接
在POI中往单元格中写连接,是用HYPERLINK函数搞定的。
HYPERLINK函数包含两个参数,第一个参数是指向的URL地址,第二个参数是显示字串。
cell = row.createCell((short)(dataFlag)); cell.setCellType(HSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("HYPERLINK('连接地址http...')"); cell.setCellStyle(linkStyle); |
为了使连接效果更好,咱们能够给连接所在单元格定义一种样式,使连接显示为有下划线的蓝色字串:
HSSFCellStyle linkStyle = workbook.createCellStyle(); linkStyle.setBorderBottom((short)1); linkStyle.setBorderLeft((short)1); linkStyle.setBorderRight((short)1); linkStyle.setBorderTop((short)1); linkStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index); linkStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); HSSFFont font = workbook.createFont(); font.setFontName(HSSFFont.FONT_ARIAL); font.setUnderline((byte)1); font.setColor(HSSFColor.BLUE.index); linkStyle.setFont(font); |
中文处理:
要在经过POI生成的EXCEL中正常显示中文,须要为单元格设置编码:
cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("部门"); |