您好,我正在使用一个简单的 Powershell 脚本将 CSV 文件转换为 XLSX 文件。但是 Excel 会忽略列表分隔符并将所有数据放在第一列中。
但是,在 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 filename:="DATA.TXT", dataType:=xlDelimited, tab:=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 默认打开时使用文本到列导入,并以制表符作为分隔符。