我在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)
谢谢
答案 0 :(得分:1)
如果你想使用PS,这很容易快速和肮脏。像魅力一样。
$csv = Import-csv "C:\initial.csv"
$csv | Export-Csv "C:\converted.csv" -NoClobber -NoTypeInformation -Delimiter ";"
答案 1 :(得分:0)
答案 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