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
相关产品推荐
相关产品推荐

