J'KYO
No pains,no gains.

 

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("成品号/型号");//因为和上面的行合并了,所以不用再次 赋值了  


 

 

 

 

第三行数据和 第二行是一样的
posted on 2018-01-30 10:26  J'KYO  阅读(14058)  评论(1编辑  收藏  举报