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

PowerShell转Excel为CSV时日期时间显示为数值的问题求助

解决方案:PowerShell Import-Excel 保留Excel日期时间格式转换为CSV

问题根源

Excel中的日期/时间本质是OLE自动化格式数值(整数部分对应日期,小数部分对应时间),Import-Excel默认读取底层数值而非单元格显示的格式化文本。新供应商的文件未被模块自动识别为日期列,导致直接输出原始数值。

方法一:手动转换数值为指定格式的日期时间

针对已知的日期/时间列,将Excel数值转换为.NET DateTime对象,再格式化为与原Excel一致的字符串:

# 定义文件路径
$excelPath = "C:\共享目录\新供应商文件.xlsx"
$csvPath = "C:\共享目录\转换后文件.csv"

# 导入并处理数据
$processedData = Import-Excel -Path $excelPath | ForEach-Object {
    # 转换日期列Datum:从Excel数值转DateTime,格式匹配原Excel的dd/MM/yyyy
    $_.Datum = [DateTime]::FromOADate($_.Datum).ToString("dd/MM/yyyy")
    # 转换时间列Tijd:从Excel数值转DateTime,格式匹配原Excel的h:mm:ss tt
    $_.Tijd = [DateTime]::FromOADate($_.Tijd).ToString("h:mm:ss tt")
    # 返回处理后的行对象
    $_
}

# 导出为CSV,保持分号分隔符
$processedData | Export-Csv -Path $csvPath -Delimiter ";" -NoTypeInformation -Encoding UTF8

方法二:直接读取单元格显示的文本

如果希望完全保留Excel中显示的文本内容,可使用-AsText参数指定目标列强制读取为文本:

# 定义文件路径
$excelPath = "C:\共享目录\新供应商文件.xlsx"
$csvPath = "C:\共享目录\转换后文件.csv"

# 强制读取指定列为Excel显示的文本
$excelData = Import-Excel -Path $excelPath -AsText "Datum", "Tijd"

# 导出CSV
$excelData | Export-Csv -Path $csvPath -Delimiter ";" -NoTypeInformation -Encoding UTF8

注意事项

  • 确保ImportExcel模块为最新版本,旧版本可能存在列识别问题:
    Update-Module -Name ImportExcel -Force
    
  • 若列名变动,需同步修改代码中的列名(如Datum/Tijd)
  • 导出时指定-Delimiter ";",确保与原文件分隔符一致
  • 使用-Encoding UTF8避免特殊字符乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:25:01