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


    第三行数据和 第二行是一样的
  • 相关阅读:
    查询OOP课程
    MySchool
    华为机试——字符倒叙输出
    数组的sizeof
    华为机试——统计排序
    华为机试——整理数字字符串
    华为机试——求最小张数换零钱算法
    华为机试——拼写检查程序
    C++中的bitset
    华为机试——数字字符串转二进制
  • 原文地址:https://www.cnblogs.com/pejsidney/p/8383843.html
Copyright © 2011-2022 走看看