如何在提供列表分隔符时使用Powershell在Excel中打开CSV

如何在提供列表分隔符时使用Powershell在Excel中打开CSV,excel,powershell,csv,Excel,Powershell,Csv,嗨,我正在使用一个简单的Powershell脚本将CSV文件转换为XLSX文件。但是Excel会忽略列表分隔符,并将所有数据放在第一列中 列表分隔符配置正确(开始>控制面板>区域和语言选项->其他设置) 从Windows资源管理器手动打开文件可以正常工作 但是,在Excel中使用以下命令打开CSV时: Function Convert-toExcel { $xl = new-object -comobject excel.application $xl.visible = $tr

嗨,我正在使用一个简单的Powershell脚本将CSV文件转换为XLSX文件。但是Excel会忽略列表分隔符,并将所有数据放在第一列中

  • 列表分隔符配置正确(开始>控制面板>区域和语言选项->其他设置)
  • 从Windows资源管理器手动打开文件可以正常工作
但是,在Excel中使用以下命令打开CSV时:

Function Convert-toExcel {
   $xl = new-object -comobject excel.application
   $xl.visible = $true
   $Workbook = $xl.workbooks.OpenText("$csvfile")
   $Worksheets = $Workbooks.worksheets
}
所有内容都放在第一列

根据Powershell,列表分隔符配置正确:

(Get-Culture).textinfo
ListSeparator  : ,

尝试将
DataType
参数添加到
OpenText
方法中。它似乎采取了神奇的论点

VBA:
Workbooks.OpenText文件名:=“DATA.TXT”,数据类型:=xlDelimited,制表符:=True

我猜在powershell中它接受散列,所以:

$xl.Workbooks.OpenText(@{Filename=$CSVFile;dataTyype=“xlDelimited”,other=$true;otherchar=':'})


但是,我目前还没有办法测试它。

下面的脚本适合我。我在功能上做的一个更改是将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"
我是根据以下网页上的信息编制的:


您的原始代码运行良好。我猜excel中的分隔符不是“,”。我已经看过很多次了。ps区域性与此无关

请使用't(制表符的Powershell代码)而不是(逗号)

Excel默认在打开时使用文本导入列,并使用tab作为分隔符