POI實現EXCEL單元格合並及邊框樣式


 

POI實現EXCEL單元格合並及邊框樣式

 

 

下面例子為創建產生一個excel,合並單元格,然后為合並后的單元格添加邊框

 

[java]  view plain  copy
 
  1. package test;  
  2.   
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5.   
  6. import org.apache.poi.hssf.usermodel.HSSFCell;  
  7. import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
  8. import org.apache.poi.hssf.usermodel.HSSFRow;  
  9. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  10. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  11. import org.apache.poi.ss.usermodel.BorderStyle;  
  12. import org.apache.poi.ss.usermodel.Font;  
  13. import org.apache.poi.ss.usermodel.HorizontalAlignment;  
  14. import org.apache.poi.ss.util.CellRangeAddress;  
  15. import org.apache.poi.ss.util.RegionUtil;  
  16.   
  17. public class ExcelPoiTest {  
  18.   
  19.     public static void main(String[] args) {  
  20.           
  21.         HSSFWorkbook workbook = new HSSFWorkbook();  // 創建一個excel  
  22.         // excel生成過程: excel-->sheet-->row-->cell  
  23.         HSSFSheet sheet = workbook.createSheet("test"); // 為excel創建一個名為test的sheet頁        
  24.         HSSFRow row = sheet.createRow(1); // 創建一行,參數2表示第一行  
  25.         HSSFCell cellB2 = row.createCell(1); // 在B2位置創建一個單元格  
  26.         HSSFCell cellB3 = row.createCell(2); // 在B3位置創建一個單元格  
  27.         cellB2.setCellValue("單元格B2"); // B2單元格填充內容  
  28.         cellB3.setCellValue("單元格B3"); // B3單元格填充內容  
  29.           
  30.         HSSFCellStyle cellStyle = workbook.createCellStyle(); // 單元格樣式  
  31.         Font fontStyle = workbook.createFont(); // 字體樣式  
  32.         fontStyle.setBold(true); // 加粗  
  33.         fontStyle.setFontName("黑體"); // 字體  
  34.         fontStyle.setFontHeightInPoints((short) 11); // 大小  
  35.         // 將字體樣式添加到單元格樣式中   
  36.         cellStyle.setFont(fontStyle);  
  37.         // 邊框,居中  
  38.         cellStyle.setAlignment(HorizontalAlignment.CENTER);  
  39.         cellStyle.setBorderBottom(BorderStyle.THIN);  
  40.         cellStyle.setBorderLeft(BorderStyle.THIN);  
  41.         cellStyle.setBorderRight(BorderStyle.THIN);  
  42.         cellStyle.setBorderTop(BorderStyle.THIN);  
  43.         cellB2.setCellStyle(cellStyle); // 為B2單元格添加樣式  
  44.           
  45.         // 合並單元格  
  46.         CellRangeAddress cra =new CellRangeAddress(1, 3, 1, 3); // 起始行, 終止行, 起始列, 終止列  
  47.         sheet.addMergedRegion(cra);  
  48.           
  49.         // 使用RegionUtil類為合並后的單元格添加邊框  
  50.         RegionUtil.setBorderBottom(1, cra, sheet); // 下邊框  
  51.         RegionUtil.setBorderLeft(1, cra, sheet); // 左邊框  
  52.         RegionUtil.setBorderRight(1, cra, sheet); // 有邊框  
  53.         RegionUtil.setBorderTop(1, cra, sheet); // 上邊框  
  54.           
  55.         // 輸出到本地  
  56.         String excelName = "/myExcel.xls";  
  57.         FileOutputStream out = null;  
  58.         try {  
  59.             out = new FileOutputStream(excelName);  
  60.             workbook.write(out);  
  61.             out.flush();  
  62.             out.close();  
  63.         } catch (Exception e) {  
  64.             e.printStackTrace();  
  65.         } finally {  
  66.             if (out != null)  
  67.                 try {  
  68.                     out.close();  
  69.                 } catch (IOException e) {  
  70.                     e.printStackTrace();  
  71.                 }  
  72.             out = null;  
  73.         }  
  74.     }  
  75.   
  76. }  

 
生成的excel樣式為

 
簡單說明:
  1.excel生成過程: excel-->sheet-->row-->cell

 

  2.索引從0開始

  3.合並單元格后保留最左上角的單元格(B3單元格被B2單元格覆蓋)

  4.合並后單元格邊框通過RegionUtil設置,如果刪除以下代碼

 

[java]  view plain  copy
 
  1. <span style="font-size:18px;"><strong>      // 使用RegionUtil類為合並后的單元格添加邊框  
  2.         RegionUtil.setBorderBottom(1, cra, sheet); // 下邊框  
  3.         RegionUtil.setBorderLeft(1, cra, sheet); // 左邊框  
  4.         RegionUtil.setBorderRight(1, cra, sheet); // 有邊框  
  5.         RegionUtil.setBorderTop(1, cra, sheet); // 上邊框</strong></span>  
效果為:


可以看到只有B2單元格有邊框。

java poi 合並單元格

 
 
  1. XSSFWorkbook wb = new XSSFWorkbook();  
  2.           
  3. XSSFSheet sheet = wb.createSheet();  
  4. //這個就是合並單元格  
  5. //參數說明:1:開始行 2:結束行  3:開始列 4:結束列  
  6. //比如我要合並 第二行到第四行的    第六列到第八列     sheet.addMergedRegion(new CellRangeAddress(1,3,5,7));  
  7. sheet.addMergedRegion(new CellRangeAddress(0,0,0,1));  
  8.   
  9. XSSFRow row = sheet.createRow(number);  

 

需要注意的地方(不對的地方請指教)

感覺唯一要注意的地方就是:需要先設置 合並單元格,然后再 生成 行。

 

比如我們要生成的單元格為:

 

1工作站 左位置 1序號 2000訂單號 1成品號/型號
左位置 2序號
左位置 3序號
右位置 4序號

 

 


代碼可以這樣寫:

 

 
  1. sheet.addMergedRegion(new CellRangeAddress(0,3,0,0));  
  2. sheet.addMergedRegion(new CellRangeAddress(0,3,3,3));  
  3. sheet.addMergedRegion(new CellRangeAddress(0,3,4,4));  
  4.   
  5. //第一行數據  
  6. XSSFRow row = sheet.createRow(0);  
  7. row.createCell(0).setCellValue("工作站");  
  8. row.createCell(1).setCellValue("位置");  
  9. row.createCell(2).setCellValue("序號");  
  10. row.createCell(3).setCellValue("訂單號");  
  11. row.createCell(4).setCellValue("成品號/型號");  
  12.   
  13. //第二行數據  
  14. XSSFRow row = sheet.createRow(number);  
  15. //row.createCell(0).setCellValue("工作站");//因為和上面的行合並了,所以不用再次 賦值了  
  16. row.createCell(1).setCellValue("位置");  
  17. row.createCell(2).setCellValue("序號");  
  18. //row.createCell(3).setCellValue("訂單號");//因為和上面的行合並了,所以不用再次 賦值了  
  19. //row.createCell(4).setCellValue("成品號/型號");//因為和上面的行合並了,所以不用再次 賦值了  


 

 

 

 

第三行數據和 第二行是一樣的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM