Excel 将一列分离为三列(通过PS)

Excel 将一列分离为三列(通过PS),excel,powershell,csv,Excel,Powershell,Csv,在CSV文件中,有一列中没有标题的数据,如下所示: data1;data2;data3 data1;data2;data3 data1;data2;data3 我不知道如何通过PowerShell将其放在CVS或XLSX的3列中。 尝试了几个脚本,但结果始终相同-文件为空或无任何更改 我的代码: #Define locations and delimiter $csv = "C:\TEMP\Loginy_Nieaktywne_temp.csv" #Location of the sourc

在CSV文件中,有一列中没有标题的数据,如下所示:

data1;data2;data3

data1;data2;data3

data1;data2;data3
我不知道如何通过PowerShell将其放在CVS或XLSX的3列中。 尝试了几个脚本,但结果始终相同-文件为空或无任何更改

我的代码:

#Define locations and delimiter
$csv = "C:\TEMP\Loginy_Nieaktywne_temp.csv" #Location of the source file
$xlsx = "C:\TEMP\TEST.xlsx" #Desired location of output
$delimiter = ";" #Specify the delimiter used in the file

# Create a new Excel workbook with one empty sheet
$excel = New-Object -ComObject excel.application 
$workbook = $excel.Workbooks.Add(1)
$worksheet = $workbook.worksheets.Item(1)

# Build the QueryTables.Add command and reformat the data
$TxtConnector = ("TEXT;" + $csv)
$Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
$query = $worksheet.QueryTables.item($Connector.name)
$query.TextFileOtherDelimiter = $delimiter
$query.TextFileParseType  = 1
$query.TextFileColumnDataTypes = ,1 * $worksheet.Cells.Columns.Count
$query.AdjustColumnWidth = 1

# Execute & delete the import query
$query.Refresh()
$query.Delete()

# Save & close the Workbook as XLSX.
$Workbook.SaveAs($xlsx,51)
$excel.Quit()
编辑


这对我不起作用,没有任何改变。我试过了,但在Excel中,它们仍然在一列中。

请查看文档以了解和

根据,参数
-Header
用于指定头。否则,PowerShell将自动使用第一行作为标题

编辑
您的数据已经在3列中,由
分隔。代码将其更改为
,这将创建一个标准文件CommaSepratedV值。打开文件时,Excel可能无法识别这一点,具体取决于设置

通过编程,您可以在原始文件上使用,将
分号
参数设置为
$true

在GUI中,可以使用“文本到列”将单个列转换为多个列:


[

如果文件名正确,我认为导入/导出不会失败

PS> Get-Content .\test.csv
data1;data2;data3

data1;data2;data3

data1;data2;data3

PS> import-csv .\test.csv -delimiter ';'

data1 data2 data3
----- ----- -----
data1 data2 data3
data1 data2 data3

PS> import-csv .\test.csv -delimiter ';' -header Col1,Col2,Col3

Col1  Col2  Col3
----  ----  ----
data1 data2 data3
data1 data2 data3
data1 data2 data3

PS> import-csv .\test.csv -delimiter ';' -header Col1,Col2,Col3|export-csv .\test2.csv -notype
PS> gc .\test2.csv
"Col1","Col2","Col3"
"data1","data2","data3"
"data1","data2","data3"
"data1","data2","data3"
如果你想去掉-Header

PS> Get-Content test2.csv| select -skip 1 |Set-content .\test3.csv
> Get-Content .\test3.csv
"data1","data2","data3"
"data1","data2","data3"
"data1","data2","data3"
这将创建一个新文件,其标题列在第一行中。
我们可以使用get content命令获取现有数据,并用逗号替换分号,将它们添加到新文件中,这样我们就有了一个正确构造的CSV文件。

您可以向我们展示一些您尝试过的脚本吗?您已经有3列了(它们由分号分隔)。请后退一步,描述您面临的实际问题。您在将此导入Excel时遇到问题吗?请尝试代替
$query.TextFileOtherDelimiter=$delimiter
。不幸的是,不起作用。。他在文件中没有任何标题,可能想做一个关于
-Header
@ConnorLSW的说明。谢谢,添加了。我看不出来ext to Columns这是执行此操作的关键。已手动尝试并正在运行,但不知道如何将其放入PS中。仅使用代码的答案质量不高。请编辑您的问题以解释代码的作用以及如何解决问题。
PS> Get-Content .\test.csv
data1;data2;data3

data1;data2;data3

data1;data2;data3

PS> import-csv .\test.csv -delimiter ';'

data1 data2 data3
----- ----- -----
data1 data2 data3
data1 data2 data3

PS> import-csv .\test.csv -delimiter ';' -header Col1,Col2,Col3

Col1  Col2  Col3
----  ----  ----
data1 data2 data3
data1 data2 data3
data1 data2 data3

PS> import-csv .\test.csv -delimiter ';' -header Col1,Col2,Col3|export-csv .\test2.csv -notype
PS> gc .\test2.csv
"Col1","Col2","Col3"
"data1","data2","data3"
"data1","data2","data3"
"data1","data2","data3"
PS> Get-Content test2.csv| select -skip 1 |Set-content .\test3.csv
> Get-Content .\test3.csv
"data1","data2","data3"
"data1","data2","data3"
"data1","data2","data3"
$Header = "Header1,Header2,Header3"
$Source = "C:\TEMP\Loginy_Nieaktywne_temp.csv"
$OutFile = "C:\TEMP\Outfile.csv

$header | Out-file $OutFile

Get-content -Path $Source | Foreach {$_.Replace(";",",") | 
  Out-File $OutFile -Append}