如何使用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" 

我根据以下网页上的信息汇编了这些内容:

http://blogs.technet.com/b/heyscriptingguy/archive/2010/09/09/copy-csv-columns-to-an-excel-spreadsheet-by-using-powershell.aspx

https://social.technet.microsoft.com/Forums/en-US/919459dc-3bce-4242-bf6b-fdf37de9ae18/powershell-will-not-save-excel-file?forum=winserverpowershell