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

问题描述 投票:0回答:4

您好,我正在使用一个简单的 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  : ,
excel powershell csv
4个回答
0
投票

尝试将

DataType
参数添加到
OpenText
方法中。这似乎需要魔法论证。

VBA:

Workbooks.OpenText filename:="DATA.TXT", dataType:=xlDelimited, tab:=True

我猜在 powershell 中它接受哈希值,所以:

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

但是,我目前无法对此进行测试。


0
投票

以下脚本对我有用。我对功能所做的一项更改是将 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


0
投票

您的原始代码运行良好。我的猜测是你在Excel中的分隔符不是“,”。我已经看到很多次这样的错误了。 ps文化与此无关


0
投票

使用 `t(制表符的 Powershell 代码)而不是 ,(逗号)。

Excel 默认打开时使用文本到列导入,并以制表符作为分隔符。

© www.soinside.com 2019 - 2024. All rights reserved.