Excel CSV文件分隔符更改

时间:2015-07-22 15:48:35

标签: excel vba csv powershell delimiter

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

我的问题是我需要在列表分隔符是','的系统上执行此操作。从默认列表分隔符为&#39 ;;'的系统中读取CSV文件。我无法改变这个

所以我需要改变','将CSV文件转换为';'。我的想法是使用PowerShell实现这一目标。

我的第一次尝试是通过将文件名传递给脚本,在excel中创建CSV之后立即更改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)

谢谢

4 个答案:

答案 0 :(得分:1)

如果你想使用PS,这很容易快速和肮脏。像魅力一样。

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

答案 1 :(得分:0)

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

列表分隔符设置为分号

enter image description here

然后,在Excel SaveAs CSV

答案 2 :(得分:0)

我会采取不同的方法。

在启用宏的Excel工作簿中:

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

2)创建一个将工作簿导出为CSV的例程。它应该将工作簿作为参数,将文件名作为参数,然后导出/关闭工作簿

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

此外,如果您对原始文件名有任何控制权,我不会将分号分隔文件命名为CSV。根据定义,CSV表示逗号分隔值。将它们命名为别的。然后你的例程只需要找到分号文件,并且可以跳过CSV,因为那些已经被转换为逗号分隔。

答案 3 :(得分:0)

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传递的)并尝试将其作为路径传递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