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

如何在PowerShell中使用Import-Excel修改对象属性分组的日期格式

按日期(不含时间戳)分组Excel数据并汇总金额的问题

我使用PowerShell的Import-Excel模块将Excel中的日期列导入为对象数组,想要按日期分组并汇总对应类型的金额,但遇到了时间戳干扰分组的问题。虽然模块的-AsDate参数能将数值日期转为日期类型,但原数据的日期格式是MM-dd-yyyy HH:mm:ss,包含时间戳,导致同一天不同时间的记录无法被正确归为一组。

示例Excel数据

Date               Type       Amount    
1-1-2021 3:10:06 AM   Level 1     $1.00 
1-1-2021 5:11:03 AM   Level 1     $2.00 
1-2-2021 4:34:06 AM   Level 1     $3.00 
1-1-2021 1:56:05 AM   Level 2     $4.00 
1-1-2021 7:23:04 AM   Level 2     $5.00 
1-2-2021 9:16:00 AM   Level 1     $4.00 

尝试的代码

$result = Import-Excel -Path "C:\SampleData.xlsx" -AsDate Date | Group-Object Date | ForEach-Object {
    $_.Group | Group-Object Type | ForEach-Object {
            $sum = [System.Linq.Enumerable]::Sum([double[]] $_.Group.Amount)
            $_.Group[0].Amount = $sum.ToString('C2')
            $_.Group[0].Date = Get-Date $_.Group[0].Date -format 'yyyy-MM-dd'
            $_.Group[0]
    }
}
$result

当前错误结果

Date    Type        Amount  
1-1-2021    Level 1     $1.00   
1-1-2021    Level 1     $2.00   
1-2-2021    Level 1     $3.00   
1-1-2021    Level 2     $4.00   
1-1-2021    Level 2     $5.00   
1-2-2021    Level 1     $4.00   

预期结果

Date    Type        Amount  
1-1-2021    Level 1     $3.00       
1-2-2021    Level 1     $7.00   
1-1-2021    Level 2     $9.00

解决方案

问题根源在于分组时使用了包含时间戳的原始Date对象,导致同一天不同时间的记录被分成了不同组。需要先将日期处理为仅含年月日的形式,再作为分组依据。

修改后的代码:

$result = Import-Excel -Path "C:\SampleData.xlsx" -AsDate Date | 
    # 按日期的"纯日期部分"(自动去除时间戳)和Type同时分组
    Group-Object @{ Expression = { $_.Date.Date }; Name = 'Date' }, Type | 
    ForEach-Object {
        $sum = [System.Linq.Enumerable]::Sum([double[]] $_.Group.Amount)
        # 生成新的汇总对象
        [PSCustomObject]@{
            Date   = Get-Date $_.Values[0] -Format 'MM-dd-yyyy'
            Type   = $_.Values[1]
            Amount = $sum.ToString('C2')
        }
    }
$result

代码说明

  1. 分组逻辑优化:使用$_.Date.Date直接提取日期对象的纯日期部分(自动剔除时间戳),结合Type一次性完成分组,避免嵌套Group-Object的冗余操作。
  2. 生成干净结果:不再修改原始分组对象,直接创建新的PSCustomObject输出汇总数据,确保结果格式完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:30:44