java实现合并单元格的同时并导出excel示例

发布时间 - 2026-01-11 00:12:37    点击率:

介绍

POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI可以操作的文档格式有excel,word,powerpoint等,POI进行跨行需要用到对象HSSFSheet对象,现在就当我们程序已经定义了一个HSSFSheet对象sheet。

跨第1行第1个到第2个单元格的操作为

sheet.addMergedRegion(new Region(0,(short)0,0,(short)1)); 

跨第1行第1个到第2行第1个单元格的操作为

sheet.addMergedRegion(new Region(0,(short)0,1,(short)0)); 

重点注意事项:

     1.单元格CELL和ROW对象下标都是从0开始的。

     2.单元格合并时Region(1,2,3,4)第1个值的行号必须要比3位置的行号小,如果大于3就不能正常合并单元格

     3.合并单元格的时候要合并的单单元格必须先创建,这样方便后面再次获取这个单元格来填充数据,主要就是因为合并时不能由后向前进行合并引起的。

示例代码

import java.io.IOException; 
 
import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFCellStyle; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.hssf.util.Region; 
 
 
public class ExcelTest {  
  
 /** 
  * @param args 
  */  
 public static void main(String[] args) throws IOException {  
  
  try {  
   HSSFWorkbook wb = new HSSFWorkbook();  
   HSSFSheet sheet = wb.createSheet("new sheet");  
   HSSFCellStyle style = wb.createCellStyle(); // 样式对象  
  
   style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直  
   style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平  
   HSSFRow row = sheet.createRow((short) 0);  
   HSSFRow row2 = sheet.createRow((short) 1);  
  
   sheet.addMergedRegion(new Region(0, (short) 0, 1, (short) 0));  
   HSSFCell ce = row.createCell((short) 0);  
   ce.setEncoding(HSSFCell.ENCODING_UTF_16);// 中文处理  
   ce.setCellValue("项目\\日期"); // 表格的第一行第一列显示的数据  
   ce.setCellStyle(style); // 样式,居中  
   int num = 0;  
   for (int i = 0; i < 9; i++) { // 循环9次,每一次都要跨单元格显示  
    // 计算从那个单元格跨到那一格  
    int celln = 0;  
    int celle = 0;  
    if (i == 0) {  
     celln = 0;  
     celle = 1;  
    } else {  
     celln = (i * 2);  
     celle = (i * 2 + 1);  
    }  
    // 单元格合并  
    // 四个参数分别是:起始行,起始列,结束行,结束列  
    sheet.addMergedRegion(new Region(0, (short) (celln + 1), 0,  
      (short) (celle + 1)));  
    HSSFCell cell = row.createCell((short) (celln + 1));  
    cell.setCellValue("merging" + i); // 跨单元格显示的数据  
    cell.setCellStyle(style); // 样式  
    // 不跨单元格显示的数据,如:分两行,上一行分别两格为一格,下一行就为两格,“数量”,“金额”  
    HSSFCell cell1 = row2.createCell((short) celle);  
    HSSFCell cell2 = row2.createCell((short) (celle + 1));  
    cell1.setEncoding(HSSFCell.ENCODING_UTF_16);  
    cell1.setCellValue("数量");  
    cell1.setCellStyle(style);  
    cell2.setEncoding(HSSFCell.ENCODING_UTF_16);  
    cell2.setCellValue("金额");  
    cell2.setCellStyle(style);  
    num++;  
   }  
  
   // 在后面加上合计百分比  
  
   // 合计 在最后加上,还要跨一个单元格  
   sheet.addMergedRegion(new Region(0, (short) (2 * num + 1), 0,  
     (short) (2 * num + 2)));  
   HSSFCell cell = row.createCell((short) (2 * num + 1));  
   cell.setEncoding(HSSFCell.ENCODING_UTF_16);  
   cell.setCellValue("合计");  
   cell.setCellStyle(style);  
   HSSFCell cell1 = row2.createCell((short) (2 * num + 1));  
   HSSFCell cell2 = row2.createCell((short) (2 * num + 2));  
   cell1.setEncoding(HSSFCell.ENCODING_UTF_16);  
   cell1.setCellValue("数量");  
   cell1.setCellStyle(style);  
   cell2.setEncoding(HSSFCell.ENCODING_UTF_16);  
   cell2.setCellValue("金额");  
   cell2.setCellStyle(style);  
  
   // 百分比 同上  
   sheet.addMergedRegion(new Region(0, (short) (2 * num + 3), 0,  
     (short) (2 * num + 4)));  
   HSSFCell cellb = row.createCell((short) (2 * num + 3));  
   cellb.setEncoding(HSSFCell.ENCODING_UTF_16);  
    
   cellb.setCellValue("百分比");  
   cellb.setCellStyle(style);  
    
   HSSFCell cellb1 = row2.createCell((short) (2 * num + 3));  
   HSSFCell cellb2 = row2.createCell((short) (2 * num + 4));  
   cellb1.setEncoding(HSSFCell.ENCODING_UTF_16);  
   cellb1.setCellValue("数量");  
   cellb1.setCellStyle(style);  
   cellb2.setEncoding(HSSFCell.ENCODING_UTF_16);  
   cellb2.setCellValue("金额");  
   cellb2.setCellStyle(style);  
  
   /***这里是问题的关键,将这个工作簿写入到一个流中就可以输出相应的名字,这里需要写路径就ok了。 
   FileOutputStream fileOut = new FileOutputStream("workbook.xls");  
   wb.write(fileOut);  
   fileOut.close(); 
    **/ 
    
    
   /**第二种是输出到也面中的excel名称 
    * pName="栏目统计表"; 
 response.reset(); 
 response.setContentType("application/x-msdownload"); 
 response.setHeader("Content-Disposition","attachment; filename="+new String(pName.getBytes("gb2312"),"ISO-8859-1")+".xls"); 
 ServletOutputStream outStream=null; 
 
 try{ 
  outStream = response.getOutputStream(); 
  wb.write(outStream); 
 }catch(Exception e) 
 { 
  e.printStackTrace(); 
 }finally{ 
  outStream.close(); 
 } 
    * */ 
   System.out.print("OK");  
  } catch (Exception ex) {  
   ex.printStackTrace();  
  }  
  
 }  
  
} 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# java导出合并单元格  # java  # excel合并单元格  # 合并单元格  # Java导出Excel统计报表合并单元格的方法详解  # java实现excel导出合并单元格的步骤详解  # Java实现导出合并Excel单元格  # JAVA中excel导出一对多合并具体实现  # 单元格  # 行号  # 到第  # 都要  # 是从  # 就不能  # 要比  # 这篇文章  # 在后面  # 谢谢大家  # 就当  # 中就  # 必须先  # 第二种  # 就为  # 两行  # 跨行  # 后向  # 文档格式  # 就是因为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速搭建二级域名独立网站?  Laravel如何创建自定义Artisan命令?(代码示例)  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  潮流网站制作头像软件下载,适合母子的网名有哪些?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  浅述节点的创建及常见功能的实现  Laravel如何实现API版本控制_Laravel版本化API设计方案  个人网站制作流程图片大全,个人网站如何注销?  怎样使用JSON进行数据交换_它有什么限制  PHP 500报错的快速解决方法  如何注册花生壳免费域名并搭建个人网站?  javascript如何操作浏览器历史记录_怎样实现无刷新导航  长沙做网站要多少钱,长沙国安网络怎么样?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  如何在阿里云虚拟服务器快速搭建网站?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  javascript读取文本节点方法小结  html5的keygen标签为什么废弃_替代方案说明【解答】  北京网站制作的公司有哪些,北京白云观官方网站?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  七夕网站制作视频,七夕大促活动怎么报名?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel Fortify是什么,和Jetstream有什么关系  如何快速建站并高效导出源代码?  如何批量查询域名的建站时间记录?  什么是javascript作用域_全局和局部作用域有什么区别?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  太平洋网站制作公司,网络用语太平洋是什么意思?  ,网页ppt怎么弄成自己的ppt?  如何快速查询网站的真实建站时间?  如何快速配置高效服务器建站软件?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Laravel怎么使用artisan命令缓存配置和视图  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何选择可靠的免备案建站服务器?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程