Excel CSV 文件分隔符更改

Excel CSV files delimiter change

我在 Excel 目录中创建一个子文件夹,并在其中保存来自 Excel 工作簿

的多个 CSV 文件

我的问题是我需要在列表分隔符为“,”的系统上执行此操作。 CSV 文件是从默认列表分隔符为“;”的系统中读取的。我不能改变这个

因此我需要将 CSV 文件中的“,”更改为“;”。我的想法是使用 PowerShell 来实现。

我的第一次尝试是在 excel 中创建 CSV 文件后立即更改其分隔符,方法是将文件名传递给脚本。我设法更改了某个文件的分隔符,但我很难将路径名传递给脚本(没有错误,但文件也没有更改):

脚本代码:

param([string]$path)
$content = [IO.File]::ReadAllText($path) #readParameter

Import-CSV -Path $content  -Delimiter ','|Export-CSV -Path C:\Users\Desktop\temp.csv  -Delimiter ';' -NoTypeInformation #Export a CSV-File with ;
(Get-Content C:\Users\Desktop\temp.csv) | % {$_ -replace '"', ""} | out-file -FilePath C:\Users\Desktop\temp.csv -Force -Encoding ascii #remove " from file
Remove-Item -Path $content #remove old CSV-file
Rename-Item -Path C:\Users\Desktop\temp.csv -NewName $content #change file name

Excel 通话:

Call Shell("powershell.exe -ExecutionPolicy Unrestricted -File C:\Users\Desktop\delimiterChange.ps1 -path """ & location & """", 1)

谢谢

控制面板 > 区域设置 > 其他设置

列表分隔符设置为分号:

然后,在Excel另存为CSV

我会采取不同的方法。

在启用宏的 Excel 工作簿中:

1) 创建一个将导入分号分隔文件的例程。它应该将文件名作为参数,return 工作簿。

2) 创建一个将工作簿导出为 CSV 的例程。应该以工作簿为参数,以文件名为参数,export/close工作簿

3) 创建一个从目录中读取文件列表然后在每个文件上运行 1) 和 2) 的例程。

此外,如果您可以控制原始文件名,我不会将分号分隔的文件命名为 CSV。根据定义,CSV 表示逗号分隔值。给他们起别的名字。然后您的例程只需找到分号文件并且可以跳过 CSV,因为这些文件已经转换为逗号分隔。

如果你想使用 PS,这是简单快捷的方式。很有魅力。

$csv = Import-csv "C:\initial.csv"
$csv | Export-Csv "C:\converted.csv" -NoClobber -NoTypeInformation -Delimiter ";"
param([string]$path)
$content = [IO.File]::ReadAllText($path) #readParameter

Import-CSV -Path $content  -Delimiter ','|Export-CSV -Path C:\Users\Desktop\temp.csv  -Delimiter ';' -NoTypeInformation

您的代码读取 CSV 的 content(假设 CSV 的路径通过参数 -Path 传递)并尝试将其作为 路径Import-Csv。把上面的改成这样:

param([string]$path)

Import-CSV -Path $path |
   Export-CSV -Path C:\Users\Desktop\temp.csv -Delimiter ';' -NoType

如果在表达式中 运行 Import-Csv,您甚至可以替换文件的内容:

(Import-Csv -Path $path) |
   Export-Csv -Path $path -Delimiter ';' -NoType

我建议保留双引号,但如果您必须删除它们,您可以在管道中这样做:

(Import-Csv -Path $path) |
   ConvertTo-Csv -Delimiter ';' -NoType |
   % { $_ -replace '"', '' } |
   Set-Content -Path $path