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

PowerShell:提取Excel L/M列数据 合并同Key值后导出CSV

解决PowerShell中Import-Excel提取列并合并重复Key的问题

原代码的问题分析

  • 逻辑顺序完全颠倒:先导出空数据再尝试导入,没有实际读取源Excel文件的内容
  • Here-String使用错误:无法正确嵌入变量,也没有实现读取Excel数据的逻辑
  • 未指定数据起始行:需求明确从第6行开始读取,但代码中未配置对应参数
  • 循环数据覆盖问题:每次循环都会重置$Data变量,无法累积多文件的数据
  • 参数搭配错误:-ImportColumns和-HeaderName的使用不符合实际数据提取需求

正确实现步骤

  1. 遍历目标目录下的所有Excel文件
  2. 对每个文件,从第6行开始读取L列(第12列)和M列(第13列),将列名指定为Key、Value
  3. 收集所有文件的Key-Value数据
  4. 按Key分组,将同一Key对应的多个Value合并为逗号分隔的字符串
  5. 将处理后的数据导出为CSV文件

完整代码实现

# 配置路径
$sourcePath = "C:\PS"
$outputCsv = "C:\Out\Output.csv"

# 收集所有Excel文件的Key-Value数据
$allData = @()
Get-ChildItem -Path $sourcePath -Filter *.xlsx | ForEach-Object {
    # 从第6行开始读取L(12)、M(13)列,指定表头为Key、Value
    $fileData = Import-Excel -Path $_.FullName -StartRow 6 -ImportColumns 12,13 -HeaderName Key,Value -DataOnly
    $allData += $fileData
}

# 按Key分组,合并Value为逗号分隔的字符串
$mergedData = $allData | Group-Object -Property Key | ForEach-Object {
    [PSCustomObject]@{
        Key   = $_.Name
        Value = $_.Group.Value -join ','
    }
}

# 导出为CSV文件
$mergedData | Export-Csv -Path $outputCsv -NoTypeInformation -Encoding UTF8

代码说明

  • Get-ChildItem -Filter *.xlsx:仅筛选Excel格式文件,避免处理无关文件
  • Import-Excel -StartRow 6:严格按照需求从第6行开始读取数据
  • -ImportColumns 12,13 -HeaderName Key,Value:精准提取目标列并命名,确保数据映射正确
  • Group-Object -Property Key:按Key对数据分组,为合并Value做准备
  • -join ',':将同一Key下的多个Value合并为单一字符串,符合输出要求
  • Export-Csv -NoTypeInformation:导出CSV时去除类型信息,保证文件格式简洁规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:05:18