当前位置:编程学堂 > POI实现EXCEL单元格合并及边框样式

POI实现EXCEL单元格合并及边框样式

  • 发布:2023-09-29 14:41

-->

POI实现EXCEL单元格合并和边框样式

以下示例创建一个 Excel,合并单元格,然后为合并的单元格添加边框

  1. 封装测试;
  2. 导入java.io.FileOutputStream;
  3. 导入java.io.IOException;
  4. 导入org.apache.poi.hssf.usermodel.HSSFCell;
  5. 导入org.apache.poi.hssf.usermodel.HSSFCellStyle;
  6. 导入org.apache.poi.hssf.usermodel.HSSFRow;
  7. 导入org.apache.poi.hssf.usermodel.HSSFSheet;
  8. 导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
  9. 导入org.apache.poi.ss.usermodel.BorderStyle;
  10. 导入org.apache.poi.ss.usermodel.Font;
  11. 导入org.apache.poi.ss.usermodel.Horizo​​ntalAlignment;
  12. 导入org.apache.poi.ss.util.CellRangeAddress;
  13. 导入org.apache.poi.ss.util.RegionUtil;
  14. 公共课ExcelPoiTest{
  15. public static void main(String[] args) {
  16. HSSFWorkbook 工作簿 = new HSSFWorkbook(); // 创建一个excel
  17. //Excel生成过程:excel-->sheet-->row-->cell
  18. HSSFSheet工作表 = workbook.createSheet("测试"); //为excel创建一个名为test的sheet页面
  19. HSSFRow行=sheet.createRow(1); //创建一行,参数2代表第一行
  20. HSSFCell cellB2 = row.createCell(1); //在位置B2
  21. 创建一个单元格
  22. HSSFCell cellB3 = row.createCell(2); //在位置B3
  23. 创建一个单元格
  24. cellB2.setCellValue("单元格B2"); // 填充B2单元格内容
  25. cellB3.setCellValue("单元格B3"); // 填充B3单元格内容
  26. HSSFCellStyle cellStyle = workbook.createCellStyle(); // 单元格样式
  27. 字体 fontStyle = workbook.createFont(); // 字体样式
  28. fontStyle.setBold(true); // 粗体
  29. fontStyle.setFontName("黑体"); // 字体
  30. fontStyle.setFontHeightInPoints((短)11); // 尺寸
  31. //为单元格样式添加字体样式
  32. cellStyle.setFont(fontStyle);
  33. //边框,居中
  34. cellStyle.setAlignment(Horizo​​www.sychzs.cn);
  35. cellStyle.setBorderBottom(BorderStyle.THIN);
  36. cellStyle.setBorderLeft(BorderStyle.THIN);
  37. cellStyle.setBorderRight(BorderStyle.THIN);
  38. cellStyle.setBorderTop(BorderStyle.THIN);
  39. cellB2.setCellStyle(cellStyle); // 添加样式到单元格 B2
  40. //合并单元格
  41. CellRangeAddress cra =new CellRangeAddress(1, 3, 1, 3); //起始行、结束行、起始列、结束列
  42. sheet.addMergedRegion(cra);
  43. //使用RegionUtil类为合并的单元格添加边框
  44. RegionUtil.setBorderBottom(1, cra, Sheet); // 下边框
  45. RegionUtil.setBorderLeft(1, cra, Sheet); // 左边框
  46. RegionUtil.setBorderRight(1, cra, Sheet); // 有边框
  47. RegionUtil.setBorderTop(1, cra, Sheet); //上边框
  48. //输出到本地
  49. String excelName = "/myExcel.xls";
  50. FileOutputStream 输出 = null;
  51. 尝试{
  52. out = new FileOutputStream(excelName);
  53. workbook.write(out);
  54. out.flush();
  55. out.close();
  56. } catch(异常 e){
  57. e.printStackTrace();
  58. }终于{
  59. if(输出!=空)
  60. 尝试{
  61. out.close();
  62. } catch (IOException e) {
  63. e.printStackTrace();
  64. }
  65. out = null;
  66. }
  67. }
  68. }


生成的excel样式为
简单说明:

1.Excel生成流程:excel-->sheet-->row-->cell

2.索引从0

开始

3.合并单元格后,保留左上角单元格(单元格B3被单元格B2覆盖)

4.合并后,通过RegionUtil设置单元格边框。如果删除以下代码

  1.                // 使用 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); //上边框

效果是:


您可以看到只有单元格 B2 有边框。

java poi 合并单元格

  1. XSSFWorkbook wb = new XSSFWorkbook();
  2. XSSFSheet 表 = wb.createSheet();
  3. //这是合并后的单元格
  4. //参数说明: 1:起始行 2:结束行 3:起始列 4:结束列
  5. //比如我要合并第二行到第四行,第六列到第八列,sheet.addMergedRegion(new CellRangeAddress(1,3,5,7));
  6. sheet.addMergedRegion(new CellRangeAddress(0,0,0,1));
  7. XSSFRow行=sheet.createRow(number);

注意事项(如有不对请告诉我)

感觉唯一需要注意的是需要先设置合并单元格,然后生成行。

例如我们要生成的cell是:

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. XSSFRow行=sheet.createRow(0);
  6. row.createCell(0).setCellValue("工作站");
  7. row.createCell(1).setCellValue("位置");
  8. row.createCell(2).setCellValue("序列号");
  9. row.createCell(3).setCellValue("订单号");
  10. row.createCell(4).setCellValue("产品编号/型号");
  11. //第二行数据
  12. XSSFRow行=sheet.createRow(number);
  13. //row.createCell(0).setCellValue("Workstation");//因为和上面的行合并了,所以不需要再次赋值
  14. row.createCell(1).setCellValue("位置");
  15. row.createCell(2).setCellValue("序列号");
  16. //row.createCell(3).setCellValue("订单号");//因为和上面的行合并了,所以不需要再次赋值
  17. //row.createCell(4).setCellValue("产品编号/型号");//因为和上面的行合并了,所以不需要再次赋值

第三行数据与第二行相同

-->

相关文章