在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中它们仍在一列中。
答案 0 :(得分:0)
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将单个列转换为多个列:
[
答案 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文件。