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

多CSV垂直数据转Excel横向排版:同名ComputerName行覆盖需求

需求说明

现有多个垂直结构的CSV文件,需将数据导入单个Excel文件并以横向格式展示;规则为:若存在相同的ComputerName,则覆盖对应行数据,否则新增行。


CSV示例文件 data1

ComputerNameParameterVersionStatus
DDPC1Windows 1120H2Compliant
PatchingNACompliant

CSV示例文件 data2

ComputerNameParameterVersionStatus
DDPC2Windows 1120H2Compliant
PatchingNANot-Compliant

期望的Excel横向输出格式

ComputerNameWindows 11Patching
DDPC1CompliantCompliant
DDPC2CompliantNot-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

解决方案

实现思路

  1. 批量导入目标目录下所有CSV文件
  2. 补全CSV中空ComputerName的行(继承上一行的计算机名)
  3. 将垂直结构数据转置为横向(把Parameter作为列名,Status作为对应值)
  4. 合并数据,相同ComputerName的行自动覆盖
  5. 导出到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:10:44