PowerShell可以非常方便的使用Export-Csv来生成 CSV文件,如果你的系统中已经安装了Microsoft Excel,那么你还可以借助Excel将CSV文件转换成后缀名为 XLSX 真正的Excel文件。
下面的示例演示如何通过Get-Process获取一些数据,然后将它输出到CSV文件中。Export-Csv使用了一个选项UseCulture用来确保CSV文件中的分隔符和你当前系统中安装的Excel版本匹配。
$FileName = "$env:temp\Report" # create some CSV data Get-Process | Export-Csv -UseCulture -Path "$FileName.csv" -NoTypeInformation -Encoding UTF8 # load into Excel $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $excel.Workbooks.Open("$FileName.csv").SaveAs("$FileName.xlsx",51) $excel.Quit() explorer.exe "/Select,$FileName.xlsx"
接下来,使用Excel打开CSV文件,然后另存为XLSX文件。运行很完美,除非你遇到下面这种异常:
PS> $excel.Workbooks.Open("$FileName.csv")
Exception calling "Open" with "1" argument(s): "Old format or invalid type library. (Exception from HRESULT: 0x80028018
(TYPE_E_INVDATAREAD))"
At line:1 char:1
+ $excel.Workbooks.Open("$FileName.csv")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
这种问题属于已知的问题,当你的Excel的语言版本和你操作系统的语言版本不一致时,才可能会发生。你可能没注意到你的Windows操作系统使用的是本地化的MUI安装包。
想要尽快回避这个问题,你可以临时将进程的culture设置成你的Excel所期望的culture。
$FileName = "$env:temp\Report" # create some CSV data Get-Process | Export-Csv -Path "$FileName.csv" -NoTypeInformation -Encoding UTF8 # load into Excel $excel = New-Object -ComObject Excel.Application $excel.Visible = $true # change thread culture [System.Threading.Thread]::CurrentThread.CurrentCulture = 'en-US' $excel.Workbooks.Open("$FileName.csv").SaveAs("$FileName.xlsx",51) $excel.Quit() explorer.exe "/Select,$FileName.xlsx"
这样做也有后遗症,当你在en-US的culture下调用Excel’s的Open方法时,就不再需要使用本地的分隔符了。而是需要一个传统的逗号分隔的文件,这也是为什么我们本文的第二个例子中使用 -UseCulture参数了。
原文链接:Converting CSV to Excel File
本文链接: https://www.pstips.net/converting-csv-to-excel-file.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!