powershell - 将 XLSX 转换为 CSV(另存为)更改日期格式
问题描述
我看到这种类型的问题被问了很多次,但在 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 并执行脚本的其余部分时,这当然会导致问题。许多日期也变成“不被识别为有效的日期时间”。
我可以在代码中添加一些内容以使这些日期保持相同的格式吗?
解决方案
省去您的麻烦,并获得ImportExcel 模块,这使得它变得非常容易。另请注意, 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()
静态方法检查它们是否可转换为导入日期。
推荐阅读
- php - Doctrine:不指定类完全限定名 (FQN) 的 DQL 查询
- diff - 使用 bcompare 查看与以前版本的差异
- node.js - (节点:26972)警告:将 NODE_TLS_REJECT_UNAUTHORIZED 环境变量设置为“0”
- javascript - .after() 中的 jQuery var
- ms-word - 如何包装内容控件的标题文本?
- scala - 为什么 SBT 在编译时会找到导入,但在构建项目时却找不到?
- javascript - 如果通过 html 属性订阅,为什么我的 Web 组件的 CustomEvent 事件处理程序没有被调用?
- javascript - 从php中检索数据
- kubernetes - google PD 的 kubernetes 卷挂载问题(已安装 kubeadm)
- sql - 连接多个表时,总和是它应该是的倍数