PowerShell中基于Type列汇总Amount列数值的问题求助
问题排查与修正
核心问题分析
- 未定义变量导致循环未执行:你将导入的数据存储在
$data变量中,但提取唯一Type值时误用了未定义的$importedExcelRows变量,导致$distinctTypes为空,后续的foreach循环根本不会运行,最终$output自然为$null。 - Group-Object用法错误:循环内使用
Group-Object $type是逻辑错误,Group-Object需要传入分组的属性名(这里是Type),而非具体的类型值;且整个foreach循环完全多余,直接对原始数据按Type分组即可完成统计。 - 缺失金额格式化:默认求和结果是纯数字,需要转为带
$的货币格式才能匹配期望输出。
修正后的代码
$fileName = "C:\SampleData.xlsx" $data = Import-Excel -Path $fileName # 直接按Type分组并计算总和,同时格式化金额 $output = $data | Group-Object -Property Type | ForEach-Object { [PSCustomObject]@{ Type = $_.Name Amount = '{0:C}' -f ($_.Group | Measure-Object -Property Amount -Sum).Sum } } $output
更简化的写法(使用计算属性)
$fileName = "C:\SampleData.xlsx" Import-Excel -Path $fileName | Group-Object Type | Select-Object Name, @{Name='Amount'; Expression={'{0:C}' -f ($_.Group | Measure-Object Amount -Sum).Sum}} | Rename-ItemProperty -Name Name -NewName Type
输出结果
Type Amount ---- ------ level 1 $3.00 level 2 $3.00 level 3 $9.00
内容的提问来源于stack exchange,提问作者Walter
相关产品推荐
相关产品推荐

