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

 

 

下面例子为创建产生一个excel,合并单元格,然后为合并后的单元格添加边框

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


 
生成的excel样式为

 
简单说明:

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

  2.索引从0开始

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

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

  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. XSSFSheet sheet = 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 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. XSSFRow row = 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 row = sheet.createRow(number);
  13. //row.createCell(0).setCellValue("工作站");//因为和上面的行合并了,所以不用再次 赋值了
  14. row.createCell(1).setCellValue("位置");
  15. row.createCell(2).setCellValue("序号");
  16. //row.createCell(3).setCellValue("订单号");//因为和上面的行合并了,所以不用再次 赋值了
  17. //row.createCell(4).setCellValue("成品号/型号");//因为和上面的行合并了,所以不用再次 赋值了

第三行数据和 第二行是一样的

POI实现EXCEL单元格合并及边框样式的更多相关文章

  1. POI对Excel单元格进行颜色设置

    POI对Excel单元格进行颜色设置 学习了:http://www.myexception.cn/program/1932587.html HSSFWorkbook workbook = new HS ...

  2. 修复Java使用POI合并Excel单元格后,边框不显示的问题

    使用Apache POI生成Excel文档时,当进行单元格合并操作后,被合并的单元格边框会消失,使用如下方式可以解决. 创建方法: public void setBorderStyle(int bor ...

  3. POI获取excel单元格红色字体,淡蓝色前景色的内容

    如果是Microsoft Excel 97-2003 工作表 (.xls) if(31 == cell.getCellStyle().getFillForegroundColor()) //判断单元格 ...

  4. php实现excel单元格合并,字体加粗居中等操作

    使用的是phpexcel,基本用的原生语法,所见即所得,直接复制下面代码,即可: // 引用phpexcel类 $this->load->library('PHPExcel'); // 创 ...

  5. java POI实现Excel单元格数据换行

    当我们通过POI设置了表格的列宽的时候,如果文字过长,希望文字能够自己折行显示. 截取代码如下: Workbook wb = new XSSFWorkbook(); //or new HSSFWork ...

  6. C# 解决EXCEL单元格合并,行高无法自适应问题

    解决方法:根据单元格内容长度,设置单元格所在行的行高 public static float getExcelCellAutoHeight(string strtest, float fontCoun ...

  7. POI 设置Excel单元格背景色(setFillForegroundColor)

    背景介绍:使用Java开发信息系统项目,项目中往往会涉及到报表管理部分,而Excel表格首当其冲称为最合适的选择,但是对单元格操作时对于设置单元格的背景颜色却很少提及,本文旨在方便单元格背景颜色设计. ...

  8. NPOI设置Excel单元格字体、边框、对齐、背景色

    代码: ICellStyle cellStyle = workbook.CreateCellStyle(); cellStyle.BorderBottom = BorderStyle.Thin; ce ...

  9. poi 取excel单元格内容时,需要判断单元格的类型,才能正确取出

    以下内容非原创,原文链接http://blog.sina.com.cn/s/blog_4b5bc01101015iuq.html ate String getCellValue(HSSFCell ce ...

随机推荐

  1. 关于Gson无法将匿名类转化为json字符串的问题

    在使用gson过程中,一般会将数据存在一个对象模型中,使用gson将模型转换成json字符串用于数据交互. 代码形如: ArrayList<String> list = new Array ...

  2. win10系统如何进入BIOS模式

    前言 安装双系统时,一般需要设置一些BOOT的选项值,比如security boot的选项.以前都是重启之后按F2或者F12等进入BIOS模式的, 但是博主按照这种方式没有正确进入,本文就针对这一问题 ...

  3. chapter02 回归模型在''美国波士顿房价预测''问题中实践

    #coding=utf8 # 从sklearn.datasets导入波士顿房价数据读取器. from sklearn.datasets import load_boston # 从sklearn.mo ...

  4. TJU Problem 1015 Gridland

    最重要的是找规律. 下面是引用 http://blog.sina.com.cn/s/blog_4dc813b20100snyv.html 的讲解: 做这题时,千万不要被那个图给吓着了,其实这题就是道简 ...

  5. android中的两种上下文区别

    1.this    继承于content      子类 2.getAppliCationContext()     返回值为context    父类 父类有的子类都有,子类父类不一定有. 在对话框 ...

  6. BZOJ1076: [SCOI2008]奖励关【状压DP+期望DP】

    Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...

  7. 记录一次服务器CPU 100%的解决过程

    昨天客户反馈业务系统很慢,而且偶尔报错. 查看nginx日志: [root@s2 nginx]# tail log/error.log 2017/03/14 12:54:46 [error] 1704 ...

  8. centos7 添加用户并授权root权限

    centos7.2 版本,我们不可能每次都用root账号登陆,root账号公认的不安全,所以,首先,禁止掉root账号的登陆.1.静止root账号登陆. $ vi /etc/ssh/sshd.conf ...

  9. sprintf拼接字符串的问题

    ] = {}; char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'}; char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', ...

  10. commonJS模块规范 和 es6模块规范 区别

    ES6 模块与 CommonJS 模块的差异 CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用. CommonJS 模块是运行时加载,ES6 模块是编译时输出接口. Commo ...