package my.excel; import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFColor; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class CellFormatExcel { public static void main(String[] args) { try { // 建立Excel表格工做簿 Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("表格單元格格式化"); //============================ // 設置單元格的字體 //============================ Row ztRow = sheet.createRow((short)0); Cell ztCell = ztRow.createCell(0); ztCell.setCellValue("中國"); // 建立單元格樣式對象 XSSFCellStyle ztStyle = (XSSFCellStyle) wb.createCellStyle(); // 建立字體對象 Font ztFont = wb.createFont(); ztFont.setItalic(true); // 設置字體爲斜體字 ztFont.setColor(Font.COLOR_RED); // 將字體設置爲「紅色」 ztFont.setFontHeightInPoints((short)22); // 將字體大小設置爲18px ztFont.setFontName("華文行楷"); // 將「華文行楷」字體應用到當前單元格上 ztFont.setUnderline(Font.U_DOUBLE); // 添加(Font.U_SINGLE單條下劃線/Font.U_DOUBLE雙條下劃線) ztFont.setBoldweight(Font.BOLDWEIGHT_BOLD); //字體加粗 // ztFont.setStrikeout(true); // 是否添加刪除線 ztStyle.setFont(ztFont); // 將字體應用到樣式上面 ztCell.setCellStyle(ztStyle); // 樣式應用到該單元格上 //============================ // 設置單元格邊框 //============================ Row borderRow = sheet.createRow(2); Cell borderCell = borderRow.createCell(1); borderCell.setCellValue("中國"); // 建立單元格樣式對象 XSSFCellStyle borderStyle = (XSSFCellStyle)wb.createCellStyle(); // 設置單元格邊框樣式 // CellStyle.BORDER_DOUBLE 雙邊線 // CellStyle.BORDER_THIN 細邊線 // CellStyle.BORDER_MEDIUM 中等邊線 // CellStyle.BORDER_DASHED 虛線邊線 // CellStyle.BORDER_HAIR 小圓點虛線邊線 // CellStyle.BORDER_THICK 粗邊線 borderStyle.setBorderBottom(CellStyle.BORDER_THICK); borderStyle.setBorderTop(CellStyle.BORDER_DASHED); borderStyle.setBorderLeft(CellStyle.BORDER_DOUBLE); borderStyle.setBorderRight(CellStyle.BORDER_THIN); // 設置單元格邊框顏色 borderStyle.setBottomBorderColor(new XSSFColor(java.awt.Color.RED)); borderStyle.setTopBorderColor(new XSSFColor(java.awt.Color.GREEN)); borderStyle.setLeftBorderColor(new XSSFColor(java.awt.Color.BLUE)); borderCell.setCellStyle(borderStyle); //============================ // 設置單元內容的對齊方式 //============================ Row alignRow = sheet.createRow(4); Cell alignCell = alignRow.createCell(1); alignCell.setCellValue("中國"); // 建立單元格樣式對象 XSSFCellStyle alignStyle = (XSSFCellStyle)wb.createCellStyle(); // 設置單元格內容水平對其方式 // XSSFCellStyle.ALIGN_CENTER 居中對齊 // XSSFCellStyle.ALIGN_LEFT 左對齊 // XSSFCellStyle.ALIGN_RIGHT 右對齊 alignStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 設置單元格內容垂直對其方式 // XSSFCellStyle.VERTICAL_TOP 上對齊 // XSSFCellStyle.VERTICAL_CENTER 中對齊 // XSSFCellStyle.VERTICAL_BOTTOM 下對齊 alignStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); alignCell.setCellStyle(alignStyle); //============================ // 設置單元格的高度和寬度 //============================ Row sizeRow = sheet.createRow(6); sizeRow.setHeightInPoints(30); // 設置行的高度 Cell sizeCell = sizeRow.createCell(1); String sizeCellValue = "《Java編程思想》"; // 字符串的長度爲10,表示該字符串中有10個字符,忽略中英文 sizeCell.setCellValue(sizeCellValue); // 設置單元格的長度爲sizeCellVlue的長度。而sheet.setColumnWidth使用sizeCellVlue的字節數 // sizeCellValue.getBytes().length == 16 sheet.setColumnWidth(1, (sizeCellValue.getBytes().length) * 256 ); //============================ // 設置單元格自動換行 //============================ Row wrapRow = sheet.createRow(8); Cell wrapCell = wrapRow.createCell(2); wrapCell.setCellValue("寶劍鋒從磨礪出,梅花香自苦寒來"); // 建立單元格樣式對象 XSSFCellStyle wrapStyle = (XSSFCellStyle)wb.createCellStyle(); wrapStyle.setWrapText(true); // 設置單元格內容是否自動換行 wrapCell.setCellStyle(wrapStyle); //============================ // 合併單元格列 //============================ Row regionRow = sheet.createRow(12); Cell regionCell = regionRow.createCell(0); regionCell.setCellValue("寶劍鋒從磨礪出,梅花香自苦寒來"); // 合併第十三行中的A、B、C三列 CellRangeAddress region = new CellRangeAddress(12, 12, 0, 2); // 參數都是從O開始 sheet.addMergedRegion(region); //============================ // 合併單元格行和列 //============================ Row regionRow2 = sheet.createRow(13); Cell regionCell2 = regionRow2.createCell(3); String region2Value = "寶劍鋒從磨礪出,梅花香自苦寒來。" + "採得百花成蜜後,爲誰辛苦爲誰甜。" + "操千曲然後曉聲,觀千劍然後識器。" + "察己則能夠知人,察今則能夠知古。"; regionCell2.setCellValue(region2Value); // 合併第十三行中的A、B、C三列 CellRangeAddress region2 = new CellRangeAddress(13, 17, 3, 7); // 參數都是從O開始 sheet.addMergedRegion(region2); XSSFCellStyle region2Style = (XSSFCellStyle)wb.createCellStyle(); region2Style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); region2Style.setWrapText(true); // 設置單元格內容是否自動換行 regionCell2.setCellStyle(region2Style); //============================ // 將Excel文件寫入到磁盤上 //============================ FileOutputStream is = new FileOutputStream("document/CellFormatExcel.xlsx"); wb.write(is); is.close(); System.out.println("寫入成功,運行結束!"); } catch(Exception e) { e.printStackTrace(); } } }
如何在合併單元格以後設置邊框:java
能夠看到在合併單元格後設置邊框,會致使有些沒有邊框,這是由於咱們只是設置了合併單元格的部分邊框,要把被合併的表格的邊框也設置上,該表格的值能夠設置爲空字符串,也能夠不設置,由於設置值也沒什麼用,由於合併以後,只有第一個被設置的值纔有效.apache
XSSFCellStyle ztStyle = (XSSFCellStyle) wb.createCellStyle(); ztStyle.setBorderBottom(CellStyle.BORDER_THIN); //下邊框邊框 ztStyle.setBorderTop(CellStyle.BORDER_THIN); //上邊框 ztStyle.setBorderLeft(CellStyle.BORDER_THIN); //左邊框 ztStyle.setBorderRight(CellStyle.BORDER_THIN); //有邊框 HSSFRow row=sheet.createRow(2); //第三行 sheet.addMergedRegion(new CellRangeAddress(2, 2,1, 5 ); //第三行的 第2列到第6列(即B到F) 合併單元格 row.createCell(1).setCellValue("答案選項"); //賦值row.createCell(2); row.createCell(3);//該單元格雖然被合併了,可是也要建立出來,並設置邊框 row.createCell(4);//該單元格雖然被合併了,可是也要建立出來,並設置邊框 row.createCell(5);//該單元格雖然被合併了,可是也要建立出來,並設置邊框 row.createCell(6).setCellValue("回覆狀況");//該單元格雖然被合併了,可是也要建立出來,並設置邊框 for (Cell cell : row) { cell.setCellStyle(styleBorderThin);//設置該行全部cell的邊框 } 或者是: sheet.addMergedRegion(new CellRangeAddress(2, 2,1, 5 ); cell = row.createCell(1); cell.setCellValue("答案選項"); // 被合併的起始單元格設置值纔有效,這裏即(1,5)中的單元格,createCell(1)設置值纔有效 cell.setCellStyle(styleBorderThin); cell = row.createCell(2); cell.setCellStyle(styleBorderThin); cell = row.createCell(3); cell.setCellStyle(styleBorderThin); cell = row.createCell(4); cell.setCellStyle(styleBorderThin); cell = row.createCell(5); cell.setCellStyle(styleBorderThin); cell = row.createCell(6); cell.setCellStyle(styleBorderThin); 或者是: sheet.addMergedRegion(new CellRangeAddress(2, 2,1, 5 ); for (int i = 1;i<=5,i++) { cell = row.createCell(i); if(i == 1){ cell.setCellValue("答案選項"); } cell.setCellStyle(styleBorderThin);//設置該行全部cell的邊框 } //若是一個單元格同時同時要設置字體居中,加粗或者是自動換行,那麼上面style放到一塊兒就能夠了 XSSFCellStyle Style = (XSSFCellStyle)wb.createCellStyle(); Font ztFont = wb.createFont(); ztFont.setFontHeightInPoints((short)12); // 將字體大小設置爲18px ztFont.setFontName("仿宋_GB2312"); //字體格式 ztFont.setBoldweight(Font.BOLDWEIGHT_BOLD);//加粗 ztStyle.setFont(ztFont); //字體應用樣式 ztStyle.setBorderBottom(CellStyle.BORDER_THIN); //下邊框邊框 ztStyle.setBorderTop(CellStyle.BORDER_THIN); //上邊框 ztStyle.setBorderLeft(CellStyle.BORDER_THIN); //左邊框 ztStyle.setBorderRight(CellStyle.BORDER_THIN); //有邊框 ztStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);//內容水平居中對齊 ztStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); //內容居中對齊 ztStyle.setWrapText(true); // 設置單元格內容是否自動換行 HSSFRow row=sheet.createRow(2); Cell cell = row.getCell(0); cell.setCellStyle(ztStyle);