乐于分享
好东西不私藏

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

【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 === 0return "";        // 先对每个姓名进行单名格式化    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表格界面,选择数据区域,点击「开发工具」→「运行宏」,找到相应宏,点击「运行」即可。

在示例中已保留了代码,大家可以动手试一试,看看效果如何。如果好用,对工作有所帮助,别忘了点个赞,或转发给同事和朋友。更期待你在留言区分享使用中遇到的问题,我们一起交流探讨。

每一次互动,都值得期待。让我们共同成长!

往期内容推荐:

【WPS JSA】对选择区域隔一行插n行
【WPS JSA】遍历多簿指定表生成新簿并表重命名
【WPS JSA】设置打印页面参数_所有工作表
【WPS JSA】批量打印不同份数的不同工作表
什么是WPS JSA?如何调用WPS宏编辑器?
工欲善其事,必先利其器。
利器在手,天下我有。
JSA代码就是利器!
可下载以下资料查看测试
2026年06月19日-【WPS JSA】名字分组折行一次性生成分组名单.zip