PowerShell脚本开发需求:基于Excel生成员工短名单列
PowerShell Script to Generate Employee Short Names from Excel
需求回顾
输入:仅包含
EmpName列的Excel文件,示例值如AARON、JEFFERY AARON等
输出:包含EmpName和EmpShortName两列的新Excel文件EmpShortName生成规则:
- 单名(只有一个单词):取首字母+全名,如AARON → A.AARON
- 全名(多个单词):名字首字母+完整姓氏,如JEFFERY AARON → J.AARON
脚本实现
首先,我们需要用到ImportExcel模块来处理Excel文件(这个模块比原生COM对象更易用,无需依赖Office客户端),如果还没安装的话,先执行安装命令:
Install-Module -Name ImportExcel -Scope CurrentUser -Force
然后是完整的处理脚本:
# 配置文件路径,记得替换成你自己的路径 $inputFilePath = "C:\Your\Input\File.xlsx" $outputFilePath = "C:\Your\Output\File.xlsx" # 读取输入Excel的EmpName列(默认读取第一个工作表,若表名不是Sheet1可加-WorksheetName参数指定) $employeeList = Import-Excel -Path $inputFilePath # 处理每条数据生成短名字 $processedData = $employeeList | ForEach-Object { # 按空格拆分名字,处理多个连续空格的情况 $nameSegments = $_.EmpName -split '\s+' if ($nameSegments.Count -eq 1) { # 单名场景:首字母+点号+全名 $shortName = "$($nameSegments[0][0]).$($nameSegments[0])" } else { # 全名场景:第一个名字的首字母+点号+最后一个单词(姓氏) $shortName = "$($nameSegments[0][0]).$($nameSegments[-1])" } # 返回包含原姓名和短姓名的对象 [PSCustomObject]@{ EmpName = $_.EmpName EmpShortName = $shortName.ToUpper() # 统一转为大写,匹配示例格式 } } # 导出处理后的数据到新Excel,自动调整列宽、冻结首行、加粗表头 $processedData | Export-Excel -Path $outputFilePath -AutoSize -FreezeTopRow -BoldTopRow -WorksheetName "ProcessedNames"
关键逻辑说明
- 名字拆分:用
-split '\s+'拆分名字,能自动过滤多个连续空格,避免出现空的拆分片段 - 单名处理:当拆分后只有一个片段时,直接取首字母拼接全名
- 全名处理:拆分后取第一个片段的首字母,拼接最后一个片段(默认姓氏在最后)
- 格式统一:用
ToUpper()确保输出的短姓名和示例一致,都是全大写格式 - 输出优化:
Export-Excel的参数让输出文件更美观,无需手动调整格式
使用步骤
- 安装
ImportExcel模块(仅第一次使用需要) - 修改脚本中的输入输出文件路径为你实际的路径
- 运行脚本,打开输出文件验证结果即可
内容的提问来源于stack exchange,提问作者Srinu
相关产品推荐
相关产品推荐

