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测试教程

