You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell提取Excel中Mod_user列的唯一值(附现有代码)

提取Excel中Mod_user列的唯一值解决方案

没问题,我来帮你搞定提取Mod_user列唯一值的需求!先帮你修正原代码里的小问题,再实现你要的功能:

原代码的几个小问题

  • 创建对象时拼写错误:psobjectl 应该是 psobject
  • 没有把每行的对象存入数组,导致最后没有数据集合可以处理
  • 初始化$myarray的方式不符合需求,我们需要一个空数组来存储所有行数据

修改后的完整代码

# 选择要读取的Excel文件
$file = "C:\Gopi_Kishan\DBBR\Build\Build_Scripts\test.xlsx"
$sheetName = "Sheet1"

# 创建Excel COM对象
$excel = New-Object -com Excel.Application
# 设置Excel不可见,避免弹出窗口
$excel.Visible = $false

# 打开Excel文件
$wb = $excel.workbooks.open($file)
# 选择要读取的工作表
$sheet = $wb.Worksheets.Item($sheetname)
# 获取已使用区域的总行数
$rowMax = ($sheet.UsedRange.Rows).Count

# 创建空数组,用于存储所有行的数据对象
$allData = @()

# 遍历从第2行开始的数据行(假设第1行是表头)
for ($i = 2; $i -le $rowMax; $i++) {
    # 创建新的自定义对象,存储当前行的数据
    $objTemp = [pscustomobject]@{
        Sno            = $sheet.Cells.Item($i,1).Text
        Issue_id       = $sheet.Cells.Item($i,5).Text
        Mod_user       = $sheet.Cells.Item($i,6).Text
        Reviewed       = $sheet.Cells.Item($i,7).Text
        Request_number = $sheet.Cells.Item($i,8).Text
    }

    # 将当前行对象添加到数组中
    $allData += $objTemp
}

# 关闭Excel文件和COM对象,避免进程残留
$wb.Close($false)
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null

# 提取Mod_user列的唯一值
$uniqueModUsers = $allData | Select-Object -ExpandProperty Mod_user -Unique

# 输出结果验证
Write-Host "所有唯一的Mod_user值:"
$uniqueModUsers | ForEach-Object { Write-Host "- $_" }

关键功能说明

  1. 简化对象创建:改用[pscustomobject]更简洁地创建自定义对象,避免原代码里的拼写错误和繁琐的Add-Member操作
  2. 数据收集:用$allData数组存储每一行的数据对象,这样后续可以对整个数据集进行处理
  3. 提取唯一值:使用Select-Object -ExpandProperty Mod_user -Unique直接从数组中提取Mod_user的唯一值,这是PowerShell处理唯一值的标准方法
  4. 清理资源:添加了关闭Excel和释放COM对象的代码,避免Excel进程在后台残留占用资源

现在你可以用$uniqueModUsers这个变量来获取所有唯一的Mod_user值,直接用于后续发送邮件的逻辑啦!

内容的提问来源于stack exchange,提问作者Kishan M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:02:39