如何使用Powershell在Excel中打开CSV,同时提供列表分隔符
您好我正在使用一个简单的Powershell脚本来将CSV文件转换为XLSX文件。 但是,Excel会忽略列表分隔符并将所有数据放在第一列中。
- 列表分隔符configuration正确(开始>控制面板>区域和语言选项 – >其他设置)
- 手动打开从Windows资源pipe理器的文件工作正常。
但是,使用以下命令在Excel中打开CSV时:
Function Convert-toExcel { $xl = new-object -comobject excel.application $xl.visible = $true $Workbook = $xl.workbooks.OpenText("$csvfile") $Worksheets = $Workbooks.worksheets }
一切都放在第一列…
按照PowerShell的列表分隔符configuration正确:
(Get-Culture).textinfo ListSeparator : ,
尝试将数据DataType
参数添加到OpenText
方法。 这似乎需要神奇的论据。
VBA: Workbooks.OpenText filename:="DATA.TXT", dataType:=xlDelimited, tab:=True
我会猜测在powershell它接受一个哈希,所以:
$xl.Workbooks.OpenText(@{Filename = $CSVFile; dataTyype = "xlDelimited", other = $true; otherchar=':' })
但是,我目前无法testing这个。
以下脚本适用于我。 我做的function的一个变化是,我把Excel.visible设置为false。
Function Export-CSVToXLS { Param( [String]$CsvFileLocation ,[String]$ExcelFilePath ) If (Test-Path $ExcelFilePath ) { Remove-Item -Path $ExcelFilePath } $FixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault $Excel = New-Object -ComObject excel.application $Excel.visible = $false $Excel.Workbooks.OpenText($CsvFileLocation) $Excel.ActiveWorkbook.SaveAs($ExcelFilePath,$FixedFormat) $Excel.Quit() Remove-Variable -Name Excel [gc]::collect() [gc]::WaitForPendingFinalizers() } Export-CSVToXLS -CsvFileLocation "C:\Temp\CSV.csv" -ExcelFilePath "C:\Temp\XLS.xlsx"
我根据以下网页上的信息汇编了这些内容: