Excel 将一列分离为三列(通过PS)
在CSV文件中,有一列中没有标题的数据,如下所示: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
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}