【WPS JSA】名字分组折行一次性生成分组名单

大家好,我是宽吻鳄。这里是「宽吻鳄画表勒格记」——专注WPS表格硬核技巧,每期干货,让你的工作效率直线飙升!欢迎关注,咱们一起解锁更多高效技能!
在进行工会换届等各类换届时,在筹备期间,制作代表团分组名单是一项必须做的内容之一。名单的结构不复杂,很简单,但是想做得快,做得美观,看似容易,其实也不容易。特别是代表人员较多又常有变动时,手工操作要反复更新很麻烦,工作量不小,也易出错。
复杂的事情怎么能简单处理呢?有没有好的方法呢?有,记住一个核心原则:使用WPS表格时,凡是批量重复的工作,都可以用JSA代码一键搞定,秒速完成!
关键点有两个:一是建模思维,保证有通用性;二是应用代码,保证有高效性。
来吧,上代码。
【WPS JSA】代码:
function 名字分组折行一次性生成分组名单() {//复制样式工作表并重命名为"第三届会员代表大会代表团分组名单"//读取"代表名单"的名单并格式化(两字姓名加空格,并每4人一组折行)//写入"第三届会员代表大会代表团分组名单"工作表对应代表团const wb = Application.ActiveWorkbook;// 步骤1:复制样式表并重命名const srcSheet = wb.Sheets("第X届会员代表大会代表团分组名单-样式");if (!srcSheet) {alert("未找到工作表:第X届会员代表大会代表团分组名单-样式");return;}// 检查是否已存在同名工作表,若存在则先删除try {const existingSheet = wb.Sheets("第三届会员代表大会代表团分组名单");if (existingSheet) {Application.DisplayAlerts = false; // 关闭警告提示existingSheet.Delete();Application.DisplayAlerts = true; // 恢复警告提示}} catch (e) {// 不存在则忽略}// 复制并放在最后srcSheet.Copy(undefined, wb.Sheets(wb.Sheets.Count));const newSheet = wb.ActiveSheet;newSheet.Name = "第三届会员代表大会代表团分组名单";// 步骤2:读取代表名单const dataSheet = wb.Sheets("代表名单");if (!dataSheet) {alert("未找到工作表:代表名单");return;}// 获取四个代表团的数据列(B~E列,从第3行开始到末尾非空)const colMap = [{ col: 2, name: "第一代表团" }, // B列{ col: 3, name: "第二代表团" }, // C列{ col: 4, name: "第三代表团" }, // D列{ col: 5, name: "第四代表团" } // E列];// 存储四个代表团的姓名数组const allGroups = [];for (let i = 0; i < colMap.length; i++) {const col = colMap[i].col;const names = [];let row = 3; // 从第3行开始(序号1所在行)let cell = dataSheet.Cells(row, col);while (cell.Text.trim() !== "") {names.push(cell.Text.trim());row++;cell = dataSheet.Cells(row, col);}allGroups.push(names);}// 步骤3:格式化姓名(每4个折行,中间加两个空格)// 使用新的格式化函数,会自动处理两个字姓名加空格和首名前空格// 步骤4:写入新工作表// 目标位置:E列(会员代表列),从第9行开始(第一代表团在第9行)const startRow = 9;const targetCol = 5; // E列for (let i = 0; i < allGroups.length; i++) {const formatted = 姓名中间加空格并四个折行(allGroups[i]);const targetCell = newSheet.Cells(startRow + i, targetCol);targetCell.Value2 = formatted;targetCell.WrapText = true; // 启用自动换行}// 可选:设置E列列宽newSheet.Columns(targetCol).ColumnWidth = 35;// 可选:设置9行到12行的行高(单位:磅)newSheet.Rows("9:12").RowHeight = 142;// 可选:设置E9:E12单元格上下居中对齐和左右居中对齐newSheet.Range("E9:E12").VerticalAlignment = xlCenter;newSheet.Range("E9:E12").HorizontalAlignment = xlCenter;// 可选:写入标题内容newSheet.Range("A1").Value2 = "吉林省123456789局工会";newSheet.Range("A2").Value2 = "第三届会员代表大会会议材料之五";newSheet.Range("A5").Value2 = "吉林省123456789局工会";newSheet.Range("A6").Value2 = "第三届会员代表大会代表团分组名单";// 提示完成alert("已成功生成【第三届会员代表大会代表团分组名单】!\n注意:两个字姓名中间已加两个空格,三个字姓名保持不变。\n每个4个人为一组并折行显示。");}function 两个字姓名中间加空格(name) {// 两个字姓名中间加两个空格;三个字及以上姓名保持不变if (!name || name.trim() === "") return "";const trimmed = name.trim();// 判断是否为两个字(中文字符长度为2)if (trimmed.length === 2) {return trimmed[0] + " " + trimmed[1]; // 中间加两个空格}return trimmed; // 三个字或以上不变}function 姓名中间加空格并四个折行(namesArray) {// 将姓名数组格式化为每4个一组折行,姓名间加两个空格if (!namesArray || namesArray.length === 0) return "";// 先对每个姓名进行单名格式化const formattedNames = namesArray.map(name => 两个字姓名中间加空格(name));const parts = [];for (let i = 0; i < formattedNames.length; i++) {// 如果是第一个名字,前面加两个空格if (i === 0) {parts.push(" " + formattedNames[i]); // 第一个名字前加两个空格} else {parts.push(formattedNames[i]);}// 每4个一组添加换行符(但不在末尾添加)if ((i + 1) % 4 === 0 && i !== formattedNames.length - 1) {parts.push("\n");}}// 用两个空格连接所有部分(换行符也会保留)let result = parts.join(" ");// 去除每行最左边和最右边的空格// 按换行符分割成行let lines = result.split("\n");// 对每一行去除首尾空格lines = lines.map(line => line.trim());// 重新用换行符连接result = lines.join("\n");return result;}
操作步骤:
方法一:
1.打开你的WPS表格文件。按下 Alt + F11(或点击「开发工具」→「WPS宏编辑器」),打开WPS JSA编辑器。
2.插入模块并粘贴代码。在编辑器左侧右键点击「项目」中的当前工作簿,选择「插入」→「模块」,将代码完整复制到右侧代码窗口中。
3.回到WPS表格界面,选择数据区域,点击「开发工具」→「运行宏」,找到相应宏,点击「运行」即可。
方法二:
1.打开你的WPS表格文件。按下 Alt + F11(或点击「开发工具」→「WPS宏编辑器」),打开WPS JSA编辑器。
2.按Ctrk+O键,导入相应js文件,就导入js文件。
3.回到WPS表格界面,选择数据区域,点击「开发工具」→「运行宏」,找到相应宏,点击「运行」即可。
在示例中已保留了代码,大家可以动手试一试,看看效果如何。如果好用,对工作有所帮助,别忘了点个赞,或转发给同事和朋友。更期待你在留言区分享使用中遇到的问题,我们一起交流探讨。
每一次互动,都值得期待。让我们共同成长!
往期内容推荐:

夜雨聆风