您好我使用简单的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 : ,
答案 0 :(得分:0)
尝试将DataType
参数添加到OpenText
方法。它似乎需要神奇的论据。
VBA:
Workbooks.OpenText filename:="DATA.TXT", dataType:=xlDelimited, tab:=True
我猜想在powershell中它会接受一个哈希,所以:
$xl.Workbooks.OpenText(@{Filename = $CSVFile; dataTyype = "xlDelimited", other = $true; otherchar=':' })
但是,我目前无法对此进行测试。
答案 1 :(得分: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"
我根据以下网页的信息对此进行了编译:
答案 2 :(得分:0)
您的原始代码可以正常工作。我的猜测是您在excel中的分隔符不是“,”。我已经看到这会花费很多时间。 ps文化与之无关
答案 3 :(得分:0)
使用`t(制表符的Powershell代码)代替,(逗号)。
Excel默认打开时使用文本导入以制表符作为分隔符的列。