Excel CSV文件分隔符更改

我在Excel中创build一个目录中的子文件夹,并保存Excel工作簿中的多个CSV文件

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

所以我需要将CSV文件中的','改成';'。 我的想法是使用PowerShell来实现这一点。

我的第一个尝试是通过传递给脚本的文件名在Excel中创build后立即更改CSV的分隔符。 我设法改变某个文件的分隔符,但我努力将path名传递给脚本(没有错误,但也没有改变文件):

脚本代码:

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) 

谢谢

 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的内容 (假设CSV的path通过参数-Path传递),并尝试将其作为Import-Csvpath传递。 将上面的内容更改为:

 param([string]$path) Import-CSV -Path $path | Export-CSV -Path C:\Users\Desktop\temp.csv -Delimiter ';' -NoType 

如果在expression式中运行Import-Csv ,则甚至可以replace该文件的内容:

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

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

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

如果你想使用PS,这是容易的快速和肮脏。 奇迹般有效。

 $csv = Import-csv "C:\initial.csv" $csv | Export-Csv "C:\converted.csv" -NoClobber -NoTypeInformation -Delimiter ";" 

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

列表分隔符设置为分号

在这里输入图像说明

然后,在Excel SaveAs CSV中

我会采取不同的方法。

在启用macros的Excel工作簿中:

1)创build一个将导入分号分隔的文件的例程。 它应该把一个文件名作为参数并返回一个工作簿。

2)创build一个将工作簿导出为CSV的例程。 它应该将工作簿作为参数,将文件名称作为参数,并导出/closures工作簿

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

此外,如果您对原始文件名有任何控制,则不会命名分号分隔的文件CSV。 根据定义,CSV意味着逗号分隔值。 命名他们别的东西。 然后你的例程只需要find分号文件,并可以跳过CSV,因为那些已经被转换为逗号分隔。