用于将多个CSV与一些共享标头合并的Powershell脚本

时间:2017-03-23 23:26:50

标签: excel powershell csv merge

由于公司政策,我对编程工具的访问权限有限。

我使用PowerShell转换文件夹中包含的多个Excel文件,将这些文件转换为CSV,然后将这些CSV合并在一起。

到目前为止,我已经创建了我的脚本,以便它转换所有excel文件并创建另一个组合这些CSV并将其输出为1 CSV的部分

我的问题:

输出CSV不会将类似的标题组合在一起,实质上我创建的输出CSV是无用的。

我有8个带有以下标题的CSV

INPUT:(CSVs)

  1. 受让人,角色,管理员,代理人,默认,共同
  2. 受让人,角色,管理员,代理人,默认,共同
  3. 受让人,角色,管理员,代理人,默认,共同
  4. 受让人,角色,管理员,代理人,默认,共同
  5. 受让人,角色,管理员,默认
  6. 受让人,角色,管理员,默认
  7. 受让人,角色,管理员,默认
  8. 受让人,角色,管理员,默认
  9. 输出:

    带有以下标题的1 CSV:

    Grantee, Role, Admin, Delegator, Default, Common

    输出文件中有重复项, 我不知道如何处理没有“Delegator”和“Common”标题的4个csv的空值。

    这是我到目前为止所做的:

    foreach($file in (Get-ChildItem "C:\Users\ZZZZZZ\Desktop\PROJECT"))
    {
        $newname = $file.FullName -replace '\.xls$', '.csv'
        $ExcelWB = new-object -comobject excel.application
        $Workbook = $ExcelWB.Workbooks.Open($file.FullName)
        $Workbook.SaveAS($newname,6)
        $Workbook.Close($false)
        $ExcelWB.quit()
    }
    
    #combines all csv 
    #combines them but does not line up the shared headers and also inserts the headers of the new csv into the sheet, would like to only have 1 header in the output
    
    $files = Get-ChildItem C:\Users\ZZZZZZ\Desktop\Project\*.csv 
    Get-Content $files | Set-Content C:\Users\ZZZZZZ\Desktop\Project\MERGED.csv
    

    我真的很感激任何人都可以给我的任何帮助,不得不做很多研究来达到“如何安装powershell”,“如何'编写'脚本”这是我第一次使用PowerShell。 / p>

1 个答案:

答案 0 :(得分:0)

使用Import-CsvExport-Csv cmdlet:

Get-ChildItem C:\Users\ZZZZZZ\Desktop\Project\*.csv |ForEach-Object {
  Import-Csv $_.FullName
} |Select-Object Grantee,Role,Admin,Delegator,Default,Common |Export-Csv C:\Users\ZZZZZZ\Desktop\Project\MERGED.csv -NoTypeInformation

对于没有DelegatorCommon标题的文件,合并后的CSV文件中的值将为空