設置單元格樣式 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("部門"); |