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

时间:2017-06-29 08:29:29

标签: 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 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()

修改

Import-Csv path/to/myfile.csv -Delimiter ";" | Export-Csv path/to/outputfile.csv

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

3 个答案:

答案 0 :(得分:0)

查看Import-CsvExport-Csv

的文档
Import-Csv path/to/myfile.csv -Delimiter ";" | Export-Csv path/to/outputfile.csv

根据ConnerLSW's comment-Header参数可用于指定标头。否则,PowerShell会自动将第1行用作标题。

修改
您的数据已在3列中,由;分隔。代码会将其更改为,,这会创建一个标准文件 C omma S 已启用 V 。打开文件时,Excel可能无法识别此项,具体取决于设置。

以编程方式,您可以在原始文件上使用Workbooks.OpenText,将Semicolon参数设置为$true

在GUI中,您可以使用Text-To-Columns将单个列转换为多个列:

[Text to Columns[1]

答案 1 :(得分:0)

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

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"

答案 2 :(得分:0)

$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}

这将创建一个新文件,其中第一行中列出了标题。 我们可以使用get content命令获取现有数据,并用逗号替换分号,将它们添加到新文件中,并且我们有一个正确构造的CSV文件。