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

如何在PowerShell中合并两个DataTable并导出为CSV

PowerShell DataTable 透视合并并导出CSV

现有DataTable结构与数据

$dt_1 数据

包含Facility、Customer、Contract三列,数据如下:

FacilityCustomerContract
A123C1
B234C2
C567C3

$dt_2 数据

在$dt_1基础上新增Material列,数据如下:

FacilityCustomerContractMaterial
A123C1M1
B234C2M1
A123C1M2
C567C3M2
C567C3M4

需求说明

按$dt_1中的Facility、Customer、Contract字段分组,每组对应一行结果;将$dt_2中同组的所有Material值转换为横向的Material - 1、Material - 2、Material - 3列,最终将结果导出为CSV文件。

初始代码问题

最初编写的代码执行后$finalResult为空,代码如下:

$merged = $dt_1 | ForEach-Object {
$dt1Row = $_
$dt2Rows = $dt_2 | Where-Object { $_.Facility -eq $dt1Row.Facility -and $_.Customer -eq $dt1Row.Customer -and $_.Contract -eq $dt1Row.Contract }
$dt1Row | Add-Member -MemberType NoteProperty -Name "Materials" -Value ($dt2Rows | Select-Object -ExpandProperty Material)
}

# Pivot the data to create the desired output format
$finalResult = $merged | ForEach-Object {
$entry = $_
$entry | Add-Member -MemberType NoteProperty -Name "Material - 1" -Value ($entry.Materials[0])
$entry | Add-Member -MemberType NoteProperty -Name "Material - 2" -Value ($entry.Materials[1])
$entry | Add-Member -MemberType NoteProperty -Name "Material - 3" -Value ($entry.Materials[2])
}

问题原因:

  • 第一个ForEach-Object块仅对$dt1Row添加属性,但未输出处理后的对象,导致$merged变量为空。
  • 第二个ForEach-Object块同样未返回处理后的对象,最终$finalResult自然为空。

修正后的可行代码

调整后的代码可正确实现需求:遍历$dt_1的每一行,匹配$dt_2中同分组的记录,创建包含原分组字段的新对象,逐个添加横向的Material列并赋值,最后返回该对象。代码如下:

$merged = $dt_1 | ForEach-Object {
$dt1Row = $_
$dt2Rows = $dt_2 | Where-Object { $_.Facility -eq $dt1Row.Facility -and $_.Customer -eq $dt1Row.Customer -and $_.Contract -eq $dt1Row.Contract }

$resultObject = $dt1Row | Select-Object Facility, Customer, Contract
$materialCount = 1

foreach ($material in $dt2Rows | Select-Object -ExpandProperty Material) {
    $resultObject | Add-Member -MemberType NoteProperty -Name ("Material - $materialCount") -Value $material
    $materialCount++
}

$resultObject
}

导出CSV

得到$merged结果后,执行以下命令导出为CSV文件:

$merged | Export-Csv -Path "分组结果.csv" -NoTypeInformation

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:54:59