我需要结合大量的Excel电子表格。我使用PowerSHell将它们转换为CSV,现在需要合并它们,但不像通常那样合并。合并不使用连接。如果我有3个文件,每个文件有100行,我的新文件应该有300行。因此,如果UNION而不是JOIN使用数据库术语,则更多。
有些列的名称相同。有些人没有。如果它们具有相同的名称,则不应创建新列。有没有办法做到这一点,而无需手动将所有列列为属性?
示例(仅包含2个文件)
File1中:
Name Address
Bob 123 Main
文件2:
Name City
Bob LA
Tom Boston
结果
Name Address City
Bob 123 Main
Bob LA
Tom Boston
答案 0 :(得分:0)
在一天结束时,这可能无法正确排序。这里的技巧是读取每个文件的标题并将其作为字符串数组收集并删除重复项。
此代码假定所有文件都在同一位置。如果不是,您将需要考虑到这一点。
$files = Get-ChildItem -Path 'C:\temp\csv\' -Filter '*.csv' | Select-Object -ExpandProperty FullName
# Gather the headers for all the files.
$headers = $files | ForEach-Object{
(Get-Content $_ -Head 1).Split(",") | ForEach-Object{$_.Trim()}
} | Sort-Object -Unique
# Loop again now and read in the csv files as objects
$files | ForEach-Object{
Import-Csv $_
} | Select-Object $headers
输出如下:
Address City Name
------- ---- ----
123 Main Bob
LA Bob
Boston Tom