excel——动态引用单元格例子之一

本文介绍如何使用Excel解决课程教学班工号合并问题,涉及TextJoin函数、确定合并区域、教师数统计与去重、以及使用Row、Address和Indirect函数实现数据整合。最终目标是将多个工号以分号间隔并汇总在一个单元格中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.问题是一门课的一个教学班可能会由一位老师到十多位老师一起完成,一个报表要求把一个教学班的所有工号合并在一个单元格,并且用分号相隔,结果那图就是最后想要得到的结果。

数据如下
 
最后想要的结果是这样的


2.首先想到的就是textjion函数,这个函数在office2019上可用,低版本的office要自己写,这里C3单元格中的公式如图。


3.每个开课号也就是每个教学班的工号是动态的,要确定合并区域就需要明确开始单元格,结束单元格的位置,像上面c3单元格的公式中的b3就是开始,b6就是结束。位置就确定行和列。

开始单元格的行可以用row函数,列是固定的,这个比较简单。
结束单元格的行=开始单元格的行+一个教学班的教师数-1=,因为第一行是标题嘛要减1
3.1 
获取教师数,这里用countif函数


3.2  整理教师数,因为合并后一个开课号只保留一条记录,多的要删掉的。这里用一个简单的判断上下单元格是否相等,e2单元格的if函数如下,注意不要只判断教师数那一列,要把开课号和教师连接起来判断,要不然有两个教学班都是两位教师上又连续在一起就会出错,连接用&

3.3  开始单元格的行和位置
为了方便截图,先隐藏了CDE列,行用row函数,位置用address函数,要合并的是B列,address函数的第二个参数是2


3.4  结束单元格的行和位置




3.5  有了位置,再用indirect函数就可以返回实际内容了。以结束单元格为例,如下图K2单元格,这里写出来只是为了说明这个函数什么意思,K列和J列其实用不到,看看就删除了这两列

3.6 然后就是合并了,J3中公式如下

最后整理一下公式,删除教学辅组列,E2中的内容如下:

结果如下,筛选后删除不用的行,辅组的列就ok了。

### Java 实现动态合并表格单元格 在Java项目中,可以使用Apache POI库来操作Excel文件并实现单元格动态合并。通过`SXSSFWorkbook`类创建可扩展的工作簿对象,并利用`createCellRangeAddress`方法定义要合并的区域。 对于具体的应用场景,在Spring Boot环境中导出带有合并单元格功能的Excel文件时,通常会先准备数据模型,再基于此构建对应的Sheet页面结构[^3]: ```java // 创建一个新的工作表 SXSSFSheet sheet = workbook.createSheet("Example Sheet"); // 定义一个用于存储待合并行列坐标的列表 List<CellRangeAddress> mergedRegions = new ArrayList<>(); for (int rowIndex = 0; rowIndex < dataList.size(); rowIndex++) { Row row = sheet.createRow(rowIndex); // 假设每行有8列的数据填充逻辑... dataRow.createCell(7).setCellValue(pm.getPrjIntro()); // 如果满足某些条件,则记录下需要被合并的区域范围 if (someCondition) { CellRangeAddress cellRangeAddr = new CellRangeAddress( startRowIndex, endRowIndex, columnIndexStart, columnIndexEnd); mergedRegions.add(cellRangeAddr); } } // 将所有预先收集到的合并指令一次性应用至当前sheet上 mergedRegions.forEach(sheet::addMergedRegion); // 设置样式(如居中) CellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); ``` 上述代码片段展示了如何遍历数据集以决定哪些部分应该被合并成更大的单元格;同时提供了设置样式的简单例子——这里指定了水平方向上的居中对齐方式[^1]。 当涉及到Word文档内的表格操作时,同样借助于POI API完成相似的任务。不过需要注意的是,针对不同类型的Office组件(例如Excel vs Word),API的具体调用细节可能会有所区别[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值