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

PowerShell读取.NET生成的Excel时MM/DD/YYYY日期列报错如何解决

问题根因

你当前的类型判断逻辑仅覆盖了OADate数字格式、原生DateTime格式两类日期值,但本次读取到的HistoricalQuotes Date列存在MM/DD/YYYY格式的字符串类型值,且原有判断逻辑存在漏洞,导致字符串值意外进入FromOADate分支触发类型转换报错。

解决方案

优化类型判断逻辑,新增字符串类型日期的解析分支,同时使用更稳妥的-is操作符做类型校验,避免类型名称对比的不稳定问题。修改后的代码如下:

foreach($row in $SheetData) {
    $dateVal = $row.'HistoricalQuotes Date'
    $readingDate = $null
    # 处理OADate数字格式日期
    if ($dateVal -is [double]) { 
        $readingDate = [DateTime]::FromOADate($dateVal)
    }
    # 处理原生DateTime格式日期
    elseif ($dateVal -is [DateTime]) {
        $readingDate = $dateVal
    }
    # 新增字符串格式日期解析分支
    elseif ($dateVal -is [string]) {
        $parseFormat = @("MM/dd/yyyy")
        $parsedDate = [DateTime]::new()
        # 指定格式解析,忽略文化差异影响
        if ([DateTime]::TryParseExact($dateVal, $parseFormat, [Globalization.CultureInfo]::InvariantCulture, [Globalization.DateTimeStyles]::None, [ref]$parsedDate)) {
            $readingDate = $parsedDate
        }
    }
    # 其他类型默认保持null即可
}

额外优化建议

  • 如果你使用ImportExcel模块读取Excel文件,可以在导入时直接添加-DateTimeFormat 'MM/dd/yyyy'参数,读取阶段就自动完成字符串日期到DateTime类型的转换,减少后续处理逻辑。
  • 如果你的Excel中存在多种日期格式,只需要把新的格式字符串添加到$parseFormat数组中即可兼容解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:36:04