PowerShell:提取Excel L/M列数据 合并同Key值后导出CSV
解决PowerShell中Import-Excel提取列并合并重复Key的问题
原代码的问题分析
- 逻辑顺序完全颠倒:先导出空数据再尝试导入,没有实际读取源Excel文件的内容
- Here-String使用错误:无法正确嵌入变量,也没有实现读取Excel数据的逻辑
- 未指定数据起始行:需求明确从第6行开始读取,但代码中未配置对应参数
- 循环数据覆盖问题:每次循环都会重置
$Data变量,无法累积多文件的数据 - 参数搭配错误:
-ImportColumns和-HeaderName的使用不符合实际数据提取需求
正确实现步骤
- 遍历目标目录下的所有Excel文件
- 对每个文件,从第6行开始读取L列(第12列)和M列(第13列),将列名指定为Key、Value
- 收集所有文件的Key-Value数据
- 按Key分组,将同一Key对应的多个Value合并为逗号分隔的字符串
- 将处理后的数据导出为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
相关产品推荐
相关产品推荐

