【问题标题】:Convert XLSX to CSV (SaveAs) changes date format将 XLSX 转换为 CSV(另存为)更改日期格式
【发布时间】:2021-08-16 08:31:33
【问题描述】:

我看到这种类型的问题被问了很多次,但在 Powershell 中却没有,也找不到答案,所以...

我正在使用以下代码将 XLSX 文件转换为 CSV:

$sheet = "SHEET1"
$xls = "C:\temp\XLSX.xlsx"
$csv = "C:\temp\CSV.csv"
$objExcel = New-Object -ComObject Excel.Application
$objExcel.Visible = $False
$objExcel.DisplayAlerts = $False
$WorkBook = $objExcel.Workbooks.Open($xls)
$WorkSheet = $WorkBook.sheets.item("$Sheet")
$xlCSV = 6
$WorkSheet.SaveAs($csv,$xlCSV)
$objExcel.quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcel)

这种转换工作正常,除了日期。 XLSX 文件包含格式为 dd/MM/yyyy 的日期,但是在上面的代码将我的工作表保存为 CSV 之后,这些日期最终的格式为 M/d/yyyy。当我导入我的 CSV 并执行脚本的其余部分时,这当然会导致问题。许多日期也变成“不被识别为有效的日期时间”。

我可以在代码中添加一些内容,以便这些日期保持相同的格式吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    免去您的头疼,并获得ImportExcel module,这真的很容易。另请注意, ImportExcel 模块不需要 Excel 即可运行。这使得它非常适合可能无法安装 Excel 等的服务器端工作。

    我刚刚编写了一个快速测试电子表格,其中包含如下行

    number date
    ------ ----
         1 8/13/2021
         2 8/14/2021
         3 8/15/2021
    

    转换成csv的一行:

    Import-Excel C:\temp\TestDates.xlsx | 
    Export-Csv C:\temp\TestDates.csv -NoTypeInformation
    

    由于单元格是正确的日期,Import-Excel 命令返回它们并随后将它们导出为:

    number date
    ------ ----
         1 8/13/2021 12:00:00 AM
         2 8/14/2021 12:00:00 AM
         3 8/15/2021 12:00:00 AM
    

    注意:Import-Csv 不会保留日期输入。您可以在导入时轻松处理它,将其存储为根据需要格式化的字符串。

    Import-Excel C:\temp\TestDates.xlsx | 
    Select-Object Number,@{Name = 'Date'; Expression = { $_.Date.ToString('mm/dd/yyyy')}} | 
    Export-Csv C:\temp\TestDates.csv -NoTypeInformation
    

    根据您的描述,混合中可能存在一些畸形细胞。您可能需要使用[DateTime]::Parse()::ParseExact() 静态方法检查它们是否可转换为导入日期。

    【讨论】:

    • 值得一提的是ImportExcel模块不需要安装Excel
    • 好点!如果您不介意,我会将其编辑到答案中。
    • 我当然不介意。很高兴见到你:)
    • 这样一个简单的解决方案......我什至不再需要 CSV,Import-Excel -WorksheetName 完美地工作并将所有日期读取为 DateTime 和正确的格式。谢谢!
    • 很好的答案和很棒的模块 ;-)
    猜你喜欢
    • 2020-10-27
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2020-08-30
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多