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

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

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了。

### 实现Excel单元格中换行或多行显示的方法 为了使前端导出的Excel文件能够在一个单元格内正确显示多行文本,可以采用以下方法: #### 方法一:使用HTML `<br>` 标签 当构建用于导出的数据结构时,在需要换行的地方插入`<br>`标签。然而,这通常适用于通过特定库(如SheetJS)来转换HTML到Excel的情况。 ```javascript let dataWithBreaks = "第一行<br>第二行"; // 使用 SheetJS 或其他类似的库进行导出操作前设置数据 ``` 这种方法依赖于所使用的导出工具能否识别并处理HTML标记[^1]。 #### 方法二:利用特殊字符 `\n` 和 Excel 的特性 对于大多数JavaScript导出插件来说,更推荐的做法是在字符串中加入`\n`作为换行符。这是因为许多现代浏览器和Excel本身都能很好地解析这种简单的ASCII控制码。 ```javascript function prepareDataForExport(dataArray) { return dataArray.map(item => ({ ...item, multiLineText: item.multiLineText.replace(/\r\n|\r|\n/g, '\n') // 统一换行为 \n })); } ``` 在实际应用过程中,如果发现某些情况下换行未能生效,则可能是因为目标应用程序未启用自动换行功能。此时可以在生成XLSX文件之前配置样式属性以确保换行可见[^4]。 #### 示例代码片段 下面是一个完整的例子,展示了如何准备含有多行文本的数据,并将其成功地写入单个Excel单元格中: ```javascript const XLSX = require('xlsx'); // 假设这是待导出的数据集的一部分 var ws_data = [ ["姓名", "备注"], ["张三", "爱好编程。\n喜欢挑战自我。"], ["李四", "热爱阅读。\n经常参加读书分享会。"] ]; // 创建工作簿对象 var wb = new Workbook(); var ws = sheet_from_array_of_arrays(ws_data); /* 设置列宽 */ ws['!cols'] = [{wch:20}, {wch:40}]; /* 添加样式支持换行 */ ws['A2'].s = {"alignment":{"wrapText":true}}; ws['B2'].s = {"alignment":{"wrapText":true}}; wb.SheetNames.push("Sheet1"); wb.Sheets["Sheet1"] = ws; /* 导出为.xlsx 文件 */ XLSX.writeFile(wb, 'example_with_line_breaks.xlsx'); ``` 此段代码不仅实现了基本的功能需求——即让Excel单元格内的文本按预期分行显示,还额外设置了合理的列宽度以及启用了自动换行选项,从而提高了用户体验[^3]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值