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-Csv
的path传递。 将上面的内容更改为:
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,因为那些已经被转换为逗号分隔。