我有3个.txt文件,每个文件都需要转换成.csv文件。每个文件有12列,其中一些列具有前导零的数据。这些零需要保留。有没有办法通过PowerShell编写一个循环,将每个导出到.csv并保持前导零?
我能做的最接近的事情就是一次导出一个,但这并不能保持我需要的尾随零。
Import-Csv C:\AcctsLog.txt -Delimiter ";" | Export-Csv C:\AcctsLog.csv
示例行将类似于:
Joe Smith;1933 Test Lane;Apt 34;Los Angeles;CA;90003-3444;0000000023;0002;New Car;SmithJoe@yahoo.com;00934200034006700213;0000666666
答案 0 :(得分:1)
看看这是否适用于您的数据:
Import-Csv C:\AcctsLog.txt -Delimiter ';' -Header (1..12) |
ConvertTo-Csv -NoTypeInformation | select -Skip 1 |
Set-Content C:\AcctsLog.csv
答案 1 :(得分:0)
如果您明确希望它包含Excel中的前导0,则必须将其保存为Excel文件(否则,Excel会将前导零处理为在打开CSV时将其解释为数字的值)。将单元格格式化为文本后,可以将数据粘贴到Excel中,然后将文件另存为excel文件。但是如果您想要CSV文件,那么请使用mjolinor的答案,因为它会生成带有前导零的CSV文件,就像您要求的那样。
要使用Excel,您必须创建Excel ComObject。然后,您可以获取文件的内容,用制表符替换分号,管道到Clip
,然后粘贴到Excel中(在创建工作簿并格式化您需要的12列之后)。应该很简单:
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $true
$FileList = @("C:\Temp\AcctsLog.txt","C:\Temp\SecondFile.txt","C:\Temp\ThirdFile.txt")
ForEach($File in $FileList){
[void]$Excel.Workbooks.Add()
$Excel.ActiveSheet.Range("A:L").NumberFormat = '@'
(Get-Content $File) -replace ';', "`t" | Clip
$Excel.ActiveSheet.Paste()
$Excel.ActiveWorkbook.SaveAs(($File -replace "txt$","xlsx"))
$Excel.ActiveWorkbook.Close($false)
}
$Excel.Quit()
答案 2 :(得分:0)
有一种简单的方法可以在Excel中维护前导零。
只需将其添加到单元格并键入您需要的任何值,并保留零
例如:如果我想要0000000023
输入单元格'0000000023
只要您在值之前键入它,该符号似乎会保留零。