多CSV垂直数据转Excel横向排版:同名ComputerName行覆盖需求
需求说明
现有多个垂直结构的CSV文件,需将数据导入单个Excel文件并以横向格式展示;规则为:若存在相同的ComputerName,则覆盖对应行数据,否则新增行。
CSV示例文件 data1
| ComputerName | Parameter | Version | Status |
|---|---|---|---|
| DDPC1 | Windows 11 | 20H2 | Compliant |
| Patching | NA | Compliant |
CSV示例文件 data2
| ComputerName | Parameter | Version | Status |
|---|---|---|---|
| DDPC2 | Windows 11 | 20H2 | Compliant |
| Patching | NA | Not-Compliant |
期望的Excel横向输出格式
| ComputerName | Windows 11 | Patching |
|---|---|---|
| DDPC1 | Compliant | Compliant |
| DDPC2 | Compliant | Not-Compliant |
当前尝试的PowerShell代码
$path = "C:\script-$((get-date).tostring('dd-MM-yyyy')).csv" $P = Import-Csv -Path "C:\kumar.csv" | select ComputerName, Parameter, Status | foreach { new-object psobject -Property @{ ComputerName = $env:computername Parameter = $_.Parameter Status = $_.Status } } | Select ComputerName, Parameter, Status | Export-Excel $path -Force
解决方案
实现思路
- 批量导入目标目录下所有CSV文件
- 补全CSV中空
ComputerName的行(继承上一行的计算机名) - 将垂直结构数据转置为横向(把
Parameter作为列名,Status作为对应值) - 合并数据,相同
ComputerName的行自动覆盖 - 导出到Excel文件
完整PowerShell代码
# 配置参数:替换为你的实际路径 $csvFolder = "C:\YourCSVFiles" # CSV文件存放目录 $outputExcelPath = "C:\Result-$((Get-Date).ToString('dd-MM-yyyy')).xlsx" # 批量导入并处理CSV数据 $processedData = Get-ChildItem -Path $csvFolder -Filter "*.csv" | ForEach-Object { $csvContent = Import-Csv -Path $_.FullName $currentPC = $null $csvContent | ForEach-Object { # 补全空的ComputerName if (-not [string]::IsNullOrWhiteSpace($_.ComputerName)) { $currentPC = $_.ComputerName } [PSCustomObject]@{ ComputerName = $currentPC Parameter = $_.Parameter Status = $_.Status } } } # 转置数据为横向格式 $finalData = $processedData | Group-Object -Property ComputerName | ForEach-Object { $row = [PSCustomObject]@{ ComputerName = $_.Name } # 为每个Parameter创建列并赋值Status $_.Group | ForEach-Object { $row | Add-Member -MemberType NoteProperty -Name $_.Parameter -Value $_.Status -Force } $row } # 导出到Excel(需提前安装ImportExcel模块:Install-Module -Name ImportExcel -Scope CurrentUser) $finalData | Export-Excel -Path $outputExcelPath -Force -AutoSize
注意事项
- 首次运行需安装
ImportExcel模块:执行Install-Module -Name ImportExcel -Scope CurrentUser,按提示允许安装依赖模块 - 若需要控制数据覆盖优先级,可调整
Get-ChildItem的排序逻辑(比如按文件修改时间排序)
内容的提问来源于stack exchange,提问作者Sagar Mahto
相关产品推荐
相关产品推荐

